PART - ONE

Face detection from training images

Importing the necessary libraries

In [1]:
import cv2
import numpy as np
import os
import matplotlib.pyplot as plt
In [3]:
import numpy as np
# save np.load
np_load_old = np.load

# modify the default parameters of np.load
np.load = lambda *a,**k: np_load_old(*a, allow_pickle=True, **k)

data = np.load('images.npy')

Checking out a couple of samples from the loaded data

In [4]:
data[13][1]
Out[4]:
[{'label': ['Face'],
  'notes': '',
  'points': [{'x': 0.24268689057421453, 'y': 0.14420803782505912},
   {'x': 0.3531960996749729, 'y': 0.3640661938534279}],
  'imageWidth': 1400,
  'imageHeight': 642},
 {'label': ['Face'],
  'notes': '',
  'points': [{'x': 0.3531960996749729, 'y': 0.34988179669030733},
   {'x': 0.4626218851570964, 'y': 0.6430260047281324}],
  'imageWidth': 1400,
  'imageHeight': 642},
 {'label': ['Face'],
  'notes': '',
  'points': [{'x': 0.49945828819068255, 'y': 0.41371158392434987},
   {'x': 0.628385698808234, 'y': 0.6832151300236406}],
  'imageWidth': 1400,
  'imageHeight': 642},
 {'label': ['Face'],
  'notes': '',
  'points': [{'x': 0.6392199349945829, 'y': 0.10638297872340426},
   {'x': 0.7356446370530878, 'y': 0.3664302600472813}],
  'imageWidth': 1400,
  'imageHeight': 642}]

The sample with index 13 has got 4 faces.

In [8]:
data[13][0]
Out[8]:
array([[[251, 255, 254],
        [251, 255, 254],
        [251, 255, 254],
        ...,
        [159, 174, 179],
        [158, 173, 178],
        [158, 173, 178]],

       [[251, 255, 254],
        [251, 255, 254],
        [251, 255, 254],
        ...,
        [159, 174, 179],
        [158, 173, 178],
        [158, 173, 178]],

       [[251, 255, 254],
        [251, 255, 254],
        [251, 255, 254],
        ...,
        [159, 174, 179],
        [158, 173, 178],
        [158, 173, 178]],

       ...,

       [[ 72,  73,  75],
        [102, 103, 107],
        [113, 114, 118],
        ...,
        [ 50,  54,  53],
        [ 60,  65,  61],
        [ 62,  67,  63]],

       [[ 70,  72,  84],
        [ 90,  93, 102],
        [122, 122, 130],
        ...,
        [ 61,  62,  66],
        [ 78,  82,  85],
        [ 83,  87,  90]],

       [[ 85,  87,  99],
        [101, 104, 113],
        [128, 128, 136],
        ...,
        [ 72,  73,  77],
        [ 80,  84,  87],
        [ 79,  83,  86]]], dtype=uint8)
In [6]:
data[3][1]
Out[6]:
[{'label': ['Face'],
  'notes': '',
  'points': [{'x': 0.495, 'y': 0.27147766323024053},
   {'x': 0.595, 'y': 0.46048109965635736}],
  'imageWidth': 600,
  'imageHeight': 291}]

The sample with index 3 has got 1 face.

In [7]:
data[3][0]
Out[7]:
array([[[  0,   0,   0, 255],
        [  0,   0,   0, 255],
        [  0,   0,   0, 255],
        ...,
        [  0,   0,   0, 255],
        [  0,   0,   0, 255],
        [  0,   0,   0, 255]],

       [[  0,   0,   0, 255],
        [  0,   0,   0, 255],
        [  0,   0,   0, 255],
        ...,
        [  0,   0,   0, 255],
        [  0,   0,   0, 255],
        [  0,   0,   0, 255]],

       [[  0,   0,   0, 255],
        [  0,   0,   0, 255],
        [  0,   0,   0, 255],
        ...,
        [  0,   0,   0, 255],
        [  0,   0,   0, 255],
        [  0,   0,   0, 255]],

       ...,

       [[ 80,  31,  18, 255],
        [ 82,  36,  23, 255],
        [ 79,  31,  21, 255],
        ...,
        [121, 114, 104, 255],
        [120, 112, 104, 255],
        [116, 109,  99, 255]],

       [[ 73,  38,  20, 255],
        [ 76,  40,  24, 255],
        [ 79,  45,  30, 255],
        ...,
        [121, 112, 104, 255],
        [117, 110, 102, 255],
        [113, 106,  97, 255]],

       [[ 79,  37,  21, 255],
        [ 76,  32,  16, 255],
        [ 77,  33,  18, 255],
        ...,
        [119, 108,  97, 255],
        [115, 106,  96, 255],
        [111, 103,  90, 255]]], dtype=uint8)

Setting the values of image width,height and alpha

In [10]:
height = 224
width = 224
alpha = 1

Creating the features (images) and labels (masks) using the data

In [11]:
import cv2
from tensorflow.keras.applications.mobilenet import preprocess_input

masks = np.zeros((int(data.shape[0]), height, width))
X_train = np.zeros((int(data.shape[0]), height, width, 3))
for index in range(data.shape[0]):
    img = data[index][0]
    img = cv2.resize(img, dsize=(height, width), interpolation=cv2.INTER_CUBIC)
    try:
          img = img[:, :, :3]
    except:
          continue
    X_train[index] = preprocess_input(np.array(img, dtype=np.float32))
    for i in data[index][1]:
        x1 = int(i["points"][0]['x'] * width)
        x2 = int(i["points"][1]['x'] * width)
        y1 = int(i["points"][0]['y'] * height)
        y2 = int(i["points"][1]['y'] * height)
        masks[index][y1:y2, x1:x2] = 1
In [12]:
# Printing out the shapes of X_train and mask
print('The shape of X_train is: ',X_train.shape)
print('The shape of mask is: ',masks.shape)
Out[12]:
(409, 224, 224, 3)
In [14]:
# Displaying the image with index 13
n = 13
print(X_train[n])
plt.imshow(X_train[n])
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
[[[ 0.96862745  1.          0.99215686]
  [ 0.96862745  1.          0.99215686]
  [ 0.96862745  1.          0.99215686]
  ...
  [ 0.58431375  0.7019608   0.74117649]
  [ 0.34901965  0.4666667   0.50588238]
  [ 0.25490201  0.37254906  0.41176474]]

 [[ 0.96862745  1.          0.99215686]
  [ 0.96862745  1.          0.99215686]
  [ 0.96862745  1.          0.99215686]
  ...
  [ 0.58431375  0.7019608   0.74117649]
  [ 0.34901965  0.4666667   0.50588238]
  [ 0.25490201  0.37254906  0.41176474]]

 [[ 0.96862745  1.          0.99215686]
  [ 0.96862745  1.          0.99215686]
  [ 0.96862745  1.          0.99215686]
  ...
  [ 0.59215689  0.70980394  0.74901962]
  [ 0.34901965  0.4666667   0.50588238]
  [ 0.25490201  0.37254906  0.41176474]]

 ...

 [[ 0.29411769  0.3176471   0.36470592]
  [ 0.26274514  0.28627455  0.35686278]
  [ 0.53725493  0.56078434  0.65490198]
  ...
  [-0.43529409 -0.40392154 -0.38039213]
  [-0.45098037 -0.41960782 -0.39607841]
  [-0.47450978 -0.44313723 -0.41960782]]

 [[ 0.03529418  0.06666672  0.09019613]
  [-0.20784312 -0.19215685 -0.09803921]
  [-0.06666666 -0.04313725  0.06666672]
  ...
  [-0.3098039  -0.27843136 -0.25490195]
  [-0.60784316 -0.57647061 -0.5529412 ]
  [-0.60000002 -0.56862748 -0.56862748]]

 [[-0.05098039 -0.05098039  0.00392163]
  [-0.50588238 -0.50588238 -0.51372552]
  [ 0.20000005  0.27058828  0.39607847]
  ...
  [-0.36470586 -0.372549   -0.32549018]
  [-0.10588235 -0.11372548 -0.06666666]
  [-0.6156863  -0.62352943 -0.58431375]]]
Out[14]:
<matplotlib.image.AxesImage at 0x1d0a7bc03d0>
In [17]:
# Displaying the image with index 15
n = 15
print(X_train[n])
plt.imshow(X_train[n])
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
[[[-0.83529413 -0.72549021 -0.65490198]
  [-0.82745099 -0.70980394 -0.63921571]
  [-0.81176472 -0.68627453 -0.62352943]
  ...
  [-0.87450981 -0.81960785 -0.77254903]
  [-0.87450981 -0.81960785 -0.75686276]
  [-0.86666667 -0.79607844 -0.73333335]]

 [[-0.8509804  -0.7019608  -0.65490198]
  [-0.8509804  -0.7019608  -0.65490198]
  [-0.83529413 -0.68627453 -0.63921571]
  ...
  [-0.86666667 -0.81176472 -0.7647059 ]
  [-0.84313726 -0.78823531 -0.72549021]
  [-0.83529413 -0.7647059  -0.70980394]]

 [[-0.84313726 -0.67843139 -0.63921571]
  [-0.83529413 -0.67058825 -0.63137257]
  [-0.84313726 -0.67843139 -0.63921571]
  ...
  [-0.85882354 -0.80392158 -0.75686276]
  [-0.81960785 -0.7647059  -0.70980394]
  [-0.81176472 -0.74117649 -0.68627453]]

 ...

 [[-0.71764708 -0.59215689 -0.52941179]
  [-0.7019608  -0.57647061 -0.51372552]
  [-0.69411767 -0.59215689 -0.52156866]
  ...
  [-0.90588236 -0.81960785 -0.77254903]
  [-0.9137255  -0.82745099 -0.78039217]
  [-0.90588236 -0.81960785 -0.77254903]]

 [[-0.7647059  -0.68627453 -0.6156863 ]
  [-0.78039217 -0.7019608  -0.63137257]
  [-0.78823531 -0.71764708 -0.64705884]
  ...
  [-0.90588236 -0.81960785 -0.77254903]
  [-0.90588236 -0.81960785 -0.77254903]
  [-0.90588236 -0.81960785 -0.77254903]]

 [[-0.81960785 -0.7647059  -0.71764708]
  [-0.85882354 -0.79607844 -0.74901962]
  [-0.81960785 -0.78039217 -0.72549021]
  ...
  [-0.9137255  -0.82745099 -0.78039217]
  [-0.90588236 -0.81960785 -0.77254903]
  [-0.9137255  -0.82745099 -0.78039217]]]
Out[17]:
<matplotlib.image.AxesImage at 0x1d0cec29e50>
In [19]:
# Displaying the mask of the image with index 15. Clarly we can see that 3 masks are there for 3 faces
plt.imshow(masks[n])
Out[19]:
<matplotlib.image.AxesImage at 0x1d0cec88910>
In [51]:
from tensorflow.keras.applications.mobilenet import MobileNet
from tensorflow.keras.layers import Concatenate, UpSampling2D, Conv2D, Reshape
from tensorflow.keras.models import Model
import tensorflow as tf

cell_height = 28
cell_width = 28

batch_size = 1
threads = 1

Creating the model using MobileNet

In [52]:
model = MobileNet(input_shape=(height, width, 3), include_top=False, alpha=alpha, weights="imagenet")
model.summary()
Model: "mobilenet_1.00_224"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_12 (InputLayer)        [(None, 224, 224, 3)]     0         
_________________________________________________________________
conv1_pad (ZeroPadding2D)    (None, 225, 225, 3)       0         
_________________________________________________________________
conv1 (Conv2D)               (None, 112, 112, 32)      864       
_________________________________________________________________
conv1_bn (BatchNormalization (None, 112, 112, 32)      128       
_________________________________________________________________
conv1_relu (ReLU)            (None, 112, 112, 32)      0         
_________________________________________________________________
conv_dw_1 (DepthwiseConv2D)  (None, 112, 112, 32)      288       
_________________________________________________________________
conv_dw_1_bn (BatchNormaliza (None, 112, 112, 32)      128       
_________________________________________________________________
conv_dw_1_relu (ReLU)        (None, 112, 112, 32)      0         
_________________________________________________________________
conv_pw_1 (Conv2D)           (None, 112, 112, 64)      2048      
_________________________________________________________________
conv_pw_1_bn (BatchNormaliza (None, 112, 112, 64)      256       
_________________________________________________________________
conv_pw_1_relu (ReLU)        (None, 112, 112, 64)      0         
_________________________________________________________________
conv_pad_2 (ZeroPadding2D)   (None, 113, 113, 64)      0         
_________________________________________________________________
conv_dw_2 (DepthwiseConv2D)  (None, 56, 56, 64)        576       
_________________________________________________________________
conv_dw_2_bn (BatchNormaliza (None, 56, 56, 64)        256       
_________________________________________________________________
conv_dw_2_relu (ReLU)        (None, 56, 56, 64)        0         
_________________________________________________________________
conv_pw_2 (Conv2D)           (None, 56, 56, 128)       8192      
_________________________________________________________________
conv_pw_2_bn (BatchNormaliza (None, 56, 56, 128)       512       
_________________________________________________________________
conv_pw_2_relu (ReLU)        (None, 56, 56, 128)       0         
_________________________________________________________________
conv_dw_3 (DepthwiseConv2D)  (None, 56, 56, 128)       1152      
_________________________________________________________________
conv_dw_3_bn (BatchNormaliza (None, 56, 56, 128)       512       
_________________________________________________________________
conv_dw_3_relu (ReLU)        (None, 56, 56, 128)       0         
_________________________________________________________________
conv_pw_3 (Conv2D)           (None, 56, 56, 128)       16384     
_________________________________________________________________
conv_pw_3_bn (BatchNormaliza (None, 56, 56, 128)       512       
_________________________________________________________________
conv_pw_3_relu (ReLU)        (None, 56, 56, 128)       0         
_________________________________________________________________
conv_pad_4 (ZeroPadding2D)   (None, 57, 57, 128)       0         
_________________________________________________________________
conv_dw_4 (DepthwiseConv2D)  (None, 28, 28, 128)       1152      
_________________________________________________________________
conv_dw_4_bn (BatchNormaliza (None, 28, 28, 128)       512       
_________________________________________________________________
conv_dw_4_relu (ReLU)        (None, 28, 28, 128)       0         
_________________________________________________________________
conv_pw_4 (Conv2D)           (None, 28, 28, 256)       32768     
_________________________________________________________________
conv_pw_4_bn (BatchNormaliza (None, 28, 28, 256)       1024      
_________________________________________________________________
conv_pw_4_relu (ReLU)        (None, 28, 28, 256)       0         
_________________________________________________________________
conv_dw_5 (DepthwiseConv2D)  (None, 28, 28, 256)       2304      
_________________________________________________________________
conv_dw_5_bn (BatchNormaliza (None, 28, 28, 256)       1024      
_________________________________________________________________
conv_dw_5_relu (ReLU)        (None, 28, 28, 256)       0         
_________________________________________________________________
conv_pw_5 (Conv2D)           (None, 28, 28, 256)       65536     
_________________________________________________________________
conv_pw_5_bn (BatchNormaliza (None, 28, 28, 256)       1024      
_________________________________________________________________
conv_pw_5_relu (ReLU)        (None, 28, 28, 256)       0         
_________________________________________________________________
conv_pad_6 (ZeroPadding2D)   (None, 29, 29, 256)       0         
_________________________________________________________________
conv_dw_6 (DepthwiseConv2D)  (None, 14, 14, 256)       2304      
_________________________________________________________________
conv_dw_6_bn (BatchNormaliza (None, 14, 14, 256)       1024      
_________________________________________________________________
conv_dw_6_relu (ReLU)        (None, 14, 14, 256)       0         
_________________________________________________________________
conv_pw_6 (Conv2D)           (None, 14, 14, 512)       131072    
_________________________________________________________________
conv_pw_6_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_6_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_dw_7 (DepthwiseConv2D)  (None, 14, 14, 512)       4608      
_________________________________________________________________
conv_dw_7_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_dw_7_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pw_7 (Conv2D)           (None, 14, 14, 512)       262144    
_________________________________________________________________
conv_pw_7_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_7_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_dw_8 (DepthwiseConv2D)  (None, 14, 14, 512)       4608      
_________________________________________________________________
conv_dw_8_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_dw_8_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pw_8 (Conv2D)           (None, 14, 14, 512)       262144    
_________________________________________________________________
conv_pw_8_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_8_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_dw_9 (DepthwiseConv2D)  (None, 14, 14, 512)       4608      
_________________________________________________________________
conv_dw_9_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_dw_9_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pw_9 (Conv2D)           (None, 14, 14, 512)       262144    
_________________________________________________________________
conv_pw_9_bn (BatchNormaliza (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_9_relu (ReLU)        (None, 14, 14, 512)       0         
_________________________________________________________________
conv_dw_10 (DepthwiseConv2D) (None, 14, 14, 512)       4608      
_________________________________________________________________
conv_dw_10_bn (BatchNormaliz (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_dw_10_relu (ReLU)       (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pw_10 (Conv2D)          (None, 14, 14, 512)       262144    
_________________________________________________________________
conv_pw_10_bn (BatchNormaliz (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_10_relu (ReLU)       (None, 14, 14, 512)       0         
_________________________________________________________________
conv_dw_11 (DepthwiseConv2D) (None, 14, 14, 512)       4608      
_________________________________________________________________
conv_dw_11_bn (BatchNormaliz (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_dw_11_relu (ReLU)       (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pw_11 (Conv2D)          (None, 14, 14, 512)       262144    
_________________________________________________________________
conv_pw_11_bn (BatchNormaliz (None, 14, 14, 512)       2048      
_________________________________________________________________
conv_pw_11_relu (ReLU)       (None, 14, 14, 512)       0         
_________________________________________________________________
conv_pad_12 (ZeroPadding2D)  (None, 15, 15, 512)       0         
_________________________________________________________________
conv_dw_12 (DepthwiseConv2D) (None, 7, 7, 512)         4608      
_________________________________________________________________
conv_dw_12_bn (BatchNormaliz (None, 7, 7, 512)         2048      
_________________________________________________________________
conv_dw_12_relu (ReLU)       (None, 7, 7, 512)         0         
_________________________________________________________________
conv_pw_12 (Conv2D)          (None, 7, 7, 1024)        524288    
_________________________________________________________________
conv_pw_12_bn (BatchNormaliz (None, 7, 7, 1024)        4096      
_________________________________________________________________
conv_pw_12_relu (ReLU)       (None, 7, 7, 1024)        0         
_________________________________________________________________
conv_dw_13 (DepthwiseConv2D) (None, 7, 7, 1024)        9216      
_________________________________________________________________
conv_dw_13_bn (BatchNormaliz (None, 7, 7, 1024)        4096      
_________________________________________________________________
conv_dw_13_relu (ReLU)       (None, 7, 7, 1024)        0         
_________________________________________________________________
conv_pw_13 (Conv2D)          (None, 7, 7, 1024)        1048576   
_________________________________________________________________
conv_pw_13_bn (BatchNormaliz (None, 7, 7, 1024)        4096      
_________________________________________________________________
conv_pw_13_relu (ReLU)       (None, 7, 7, 1024)        0         
=================================================================
Total params: 3,228,864
Trainable params: 3,206,976
Non-trainable params: 21,888
_________________________________________________________________

Adding the layers of U-NET architecture

In [61]:
def create_model(trainable=True):
    model = MobileNet(input_shape=(height, width, 3), include_top=False, alpha=aplha, weights="imagenet")

    for layer in model.layers:
        layer.trainable = trainable

    block0 = model.get_layer("conv_pw_1_relu").output 
    block = model.get_layer("conv_pw_1_relu").output
    block1 = model.get_layer("conv_pw_3_relu").output
    block2 = model.get_layer("conv_pw_5_relu").output
    block3 = model.get_layer("conv_pw_11_relu").output
    block4 = model.get_layer("conv_pw_13_relu").output

    x = Concatenate()([UpSampling2D()(block4), block3])
    x = Concatenate()([UpSampling2D()(x), block2])
    x = Concatenate()([UpSampling2D()(x), block1])
    x = Concatenate()([UpSampling2D()(x), block])
 #   x = Concatenate()([UpSampling2D()(x), block0])
    x = UpSampling2D()(x)
    x = Conv2D(1, kernel_size=1, activation="sigmoid")(x)

    x = Reshape((height, height))(x)

    return Model(inputs=model.input, outputs=x)
In [62]:
model = create_model()

# Print summary
model.summary()
Model: "functional_17"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_16 (InputLayer)           [(None, 224, 224, 3) 0                                            
__________________________________________________________________________________________________
conv1_pad (ZeroPadding2D)       (None, 225, 225, 3)  0           input_16[0][0]                   
__________________________________________________________________________________________________
conv1 (Conv2D)                  (None, 112, 112, 32) 864         conv1_pad[0][0]                  
__________________________________________________________________________________________________
conv1_bn (BatchNormalization)   (None, 112, 112, 32) 128         conv1[0][0]                      
__________________________________________________________________________________________________
conv1_relu (ReLU)               (None, 112, 112, 32) 0           conv1_bn[0][0]                   
__________________________________________________________________________________________________
conv_dw_1 (DepthwiseConv2D)     (None, 112, 112, 32) 288         conv1_relu[0][0]                 
__________________________________________________________________________________________________
conv_dw_1_bn (BatchNormalizatio (None, 112, 112, 32) 128         conv_dw_1[0][0]                  
__________________________________________________________________________________________________
conv_dw_1_relu (ReLU)           (None, 112, 112, 32) 0           conv_dw_1_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_1 (Conv2D)              (None, 112, 112, 64) 2048        conv_dw_1_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_1_bn (BatchNormalizatio (None, 112, 112, 64) 256         conv_pw_1[0][0]                  
__________________________________________________________________________________________________
conv_pw_1_relu (ReLU)           (None, 112, 112, 64) 0           conv_pw_1_bn[0][0]               
__________________________________________________________________________________________________
conv_pad_2 (ZeroPadding2D)      (None, 113, 113, 64) 0           conv_pw_1_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_2 (DepthwiseConv2D)     (None, 56, 56, 64)   576         conv_pad_2[0][0]                 
__________________________________________________________________________________________________
conv_dw_2_bn (BatchNormalizatio (None, 56, 56, 64)   256         conv_dw_2[0][0]                  
__________________________________________________________________________________________________
conv_dw_2_relu (ReLU)           (None, 56, 56, 64)   0           conv_dw_2_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_2 (Conv2D)              (None, 56, 56, 128)  8192        conv_dw_2_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_2_bn (BatchNormalizatio (None, 56, 56, 128)  512         conv_pw_2[0][0]                  
__________________________________________________________________________________________________
conv_pw_2_relu (ReLU)           (None, 56, 56, 128)  0           conv_pw_2_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_3 (DepthwiseConv2D)     (None, 56, 56, 128)  1152        conv_pw_2_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_3_bn (BatchNormalizatio (None, 56, 56, 128)  512         conv_dw_3[0][0]                  
__________________________________________________________________________________________________
conv_dw_3_relu (ReLU)           (None, 56, 56, 128)  0           conv_dw_3_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_3 (Conv2D)              (None, 56, 56, 128)  16384       conv_dw_3_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_3_bn (BatchNormalizatio (None, 56, 56, 128)  512         conv_pw_3[0][0]                  
__________________________________________________________________________________________________
conv_pw_3_relu (ReLU)           (None, 56, 56, 128)  0           conv_pw_3_bn[0][0]               
__________________________________________________________________________________________________
conv_pad_4 (ZeroPadding2D)      (None, 57, 57, 128)  0           conv_pw_3_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_4 (DepthwiseConv2D)     (None, 28, 28, 128)  1152        conv_pad_4[0][0]                 
__________________________________________________________________________________________________
conv_dw_4_bn (BatchNormalizatio (None, 28, 28, 128)  512         conv_dw_4[0][0]                  
__________________________________________________________________________________________________
conv_dw_4_relu (ReLU)           (None, 28, 28, 128)  0           conv_dw_4_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_4 (Conv2D)              (None, 28, 28, 256)  32768       conv_dw_4_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_4_bn (BatchNormalizatio (None, 28, 28, 256)  1024        conv_pw_4[0][0]                  
__________________________________________________________________________________________________
conv_pw_4_relu (ReLU)           (None, 28, 28, 256)  0           conv_pw_4_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_5 (DepthwiseConv2D)     (None, 28, 28, 256)  2304        conv_pw_4_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_5_bn (BatchNormalizatio (None, 28, 28, 256)  1024        conv_dw_5[0][0]                  
__________________________________________________________________________________________________
conv_dw_5_relu (ReLU)           (None, 28, 28, 256)  0           conv_dw_5_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_5 (Conv2D)              (None, 28, 28, 256)  65536       conv_dw_5_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_5_bn (BatchNormalizatio (None, 28, 28, 256)  1024        conv_pw_5[0][0]                  
__________________________________________________________________________________________________
conv_pw_5_relu (ReLU)           (None, 28, 28, 256)  0           conv_pw_5_bn[0][0]               
__________________________________________________________________________________________________
conv_pad_6 (ZeroPadding2D)      (None, 29, 29, 256)  0           conv_pw_5_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_6 (DepthwiseConv2D)     (None, 14, 14, 256)  2304        conv_pad_6[0][0]                 
__________________________________________________________________________________________________
conv_dw_6_bn (BatchNormalizatio (None, 14, 14, 256)  1024        conv_dw_6[0][0]                  
__________________________________________________________________________________________________
conv_dw_6_relu (ReLU)           (None, 14, 14, 256)  0           conv_dw_6_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_6 (Conv2D)              (None, 14, 14, 512)  131072      conv_dw_6_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_6_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_pw_6[0][0]                  
__________________________________________________________________________________________________
conv_pw_6_relu (ReLU)           (None, 14, 14, 512)  0           conv_pw_6_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_7 (DepthwiseConv2D)     (None, 14, 14, 512)  4608        conv_pw_6_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_7_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_dw_7[0][0]                  
__________________________________________________________________________________________________
conv_dw_7_relu (ReLU)           (None, 14, 14, 512)  0           conv_dw_7_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_7 (Conv2D)              (None, 14, 14, 512)  262144      conv_dw_7_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_7_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_pw_7[0][0]                  
__________________________________________________________________________________________________
conv_pw_7_relu (ReLU)           (None, 14, 14, 512)  0           conv_pw_7_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_8 (DepthwiseConv2D)     (None, 14, 14, 512)  4608        conv_pw_7_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_8_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_dw_8[0][0]                  
__________________________________________________________________________________________________
conv_dw_8_relu (ReLU)           (None, 14, 14, 512)  0           conv_dw_8_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_8 (Conv2D)              (None, 14, 14, 512)  262144      conv_dw_8_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_8_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_pw_8[0][0]                  
__________________________________________________________________________________________________
conv_pw_8_relu (ReLU)           (None, 14, 14, 512)  0           conv_pw_8_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_9 (DepthwiseConv2D)     (None, 14, 14, 512)  4608        conv_pw_8_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_9_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_dw_9[0][0]                  
__________________________________________________________________________________________________
conv_dw_9_relu (ReLU)           (None, 14, 14, 512)  0           conv_dw_9_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_9 (Conv2D)              (None, 14, 14, 512)  262144      conv_dw_9_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_9_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_pw_9[0][0]                  
__________________________________________________________________________________________________
conv_pw_9_relu (ReLU)           (None, 14, 14, 512)  0           conv_pw_9_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_10 (DepthwiseConv2D)    (None, 14, 14, 512)  4608        conv_pw_9_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_10_bn (BatchNormalizati (None, 14, 14, 512)  2048        conv_dw_10[0][0]                 
__________________________________________________________________________________________________
conv_dw_10_relu (ReLU)          (None, 14, 14, 512)  0           conv_dw_10_bn[0][0]              
__________________________________________________________________________________________________
conv_pw_10 (Conv2D)             (None, 14, 14, 512)  262144      conv_dw_10_relu[0][0]            
__________________________________________________________________________________________________
conv_pw_10_bn (BatchNormalizati (None, 14, 14, 512)  2048        conv_pw_10[0][0]                 
__________________________________________________________________________________________________
conv_pw_10_relu (ReLU)          (None, 14, 14, 512)  0           conv_pw_10_bn[0][0]              
__________________________________________________________________________________________________
conv_dw_11 (DepthwiseConv2D)    (None, 14, 14, 512)  4608        conv_pw_10_relu[0][0]            
__________________________________________________________________________________________________
conv_dw_11_bn (BatchNormalizati (None, 14, 14, 512)  2048        conv_dw_11[0][0]                 
__________________________________________________________________________________________________
conv_dw_11_relu (ReLU)          (None, 14, 14, 512)  0           conv_dw_11_bn[0][0]              
__________________________________________________________________________________________________
conv_pw_11 (Conv2D)             (None, 14, 14, 512)  262144      conv_dw_11_relu[0][0]            
__________________________________________________________________________________________________
conv_pw_11_bn (BatchNormalizati (None, 14, 14, 512)  2048        conv_pw_11[0][0]                 
__________________________________________________________________________________________________
conv_pw_11_relu (ReLU)          (None, 14, 14, 512)  0           conv_pw_11_bn[0][0]              
__________________________________________________________________________________________________
conv_pad_12 (ZeroPadding2D)     (None, 15, 15, 512)  0           conv_pw_11_relu[0][0]            
__________________________________________________________________________________________________
conv_dw_12 (DepthwiseConv2D)    (None, 7, 7, 512)    4608        conv_pad_12[0][0]                
__________________________________________________________________________________________________
conv_dw_12_bn (BatchNormalizati (None, 7, 7, 512)    2048        conv_dw_12[0][0]                 
__________________________________________________________________________________________________
conv_dw_12_relu (ReLU)          (None, 7, 7, 512)    0           conv_dw_12_bn[0][0]              
__________________________________________________________________________________________________
conv_pw_12 (Conv2D)             (None, 7, 7, 1024)   524288      conv_dw_12_relu[0][0]            
__________________________________________________________________________________________________
conv_pw_12_bn (BatchNormalizati (None, 7, 7, 1024)   4096        conv_pw_12[0][0]                 
__________________________________________________________________________________________________
conv_pw_12_relu (ReLU)          (None, 7, 7, 1024)   0           conv_pw_12_bn[0][0]              
__________________________________________________________________________________________________
conv_dw_13 (DepthwiseConv2D)    (None, 7, 7, 1024)   9216        conv_pw_12_relu[0][0]            
__________________________________________________________________________________________________
conv_dw_13_bn (BatchNormalizati (None, 7, 7, 1024)   4096        conv_dw_13[0][0]                 
__________________________________________________________________________________________________
conv_dw_13_relu (ReLU)          (None, 7, 7, 1024)   0           conv_dw_13_bn[0][0]              
__________________________________________________________________________________________________
conv_pw_13 (Conv2D)             (None, 7, 7, 1024)   1048576     conv_dw_13_relu[0][0]            
__________________________________________________________________________________________________
conv_pw_13_bn (BatchNormalizati (None, 7, 7, 1024)   4096        conv_pw_13[0][0]                 
__________________________________________________________________________________________________
conv_pw_13_relu (ReLU)          (None, 7, 7, 1024)   0           conv_pw_13_bn[0][0]              
__________________________________________________________________________________________________
up_sampling2d_22 (UpSampling2D) (None, 14, 14, 1024) 0           conv_pw_13_relu[0][0]            
__________________________________________________________________________________________________
concatenate_22 (Concatenate)    (None, 14, 14, 1536) 0           up_sampling2d_22[0][0]           
                                                                 conv_pw_11_relu[0][0]            
__________________________________________________________________________________________________
up_sampling2d_23 (UpSampling2D) (None, 28, 28, 1536) 0           concatenate_22[0][0]             
__________________________________________________________________________________________________
concatenate_23 (Concatenate)    (None, 28, 28, 1792) 0           up_sampling2d_23[0][0]           
                                                                 conv_pw_5_relu[0][0]             
__________________________________________________________________________________________________
up_sampling2d_24 (UpSampling2D) (None, 56, 56, 1792) 0           concatenate_23[0][0]             
__________________________________________________________________________________________________
concatenate_24 (Concatenate)    (None, 56, 56, 1920) 0           up_sampling2d_24[0][0]           
                                                                 conv_pw_3_relu[0][0]             
__________________________________________________________________________________________________
up_sampling2d_25 (UpSampling2D) (None, 112, 112, 192 0           concatenate_24[0][0]             
__________________________________________________________________________________________________
concatenate_25 (Concatenate)    (None, 112, 112, 198 0           up_sampling2d_25[0][0]           
                                                                 conv_pw_1_relu[0][0]             
__________________________________________________________________________________________________
up_sampling2d_26 (UpSampling2D) (None, 224, 224, 198 0           concatenate_25[0][0]             
__________________________________________________________________________________________________
conv2d_11 (Conv2D)              (None, 224, 224, 1)  1985        up_sampling2d_26[0][0]           
__________________________________________________________________________________________________
reshape_11 (Reshape)            (None, 224, 224)     0           conv2d_11[0][0]                  
==================================================================================================
Total params: 3,230,849
Trainable params: 3,208,961
Non-trainable params: 21,888
__________________________________________________________________________________________________

Designing the dice coefficient and the loss function

In [63]:
from tensorflow.keras.losses import binary_crossentropy
from tensorflow.keras.backend import log, epsilon

def dice_coefficient(y_true, y_pred):
    numerator = 2 * tf.reduce_sum(y_true * y_pred)
    denominator = tf.reduce_sum(y_true + y_pred)

    return numerator / (denominator + tf.keras.backend.epsilon())

def loss(y_true, y_pred):
    return binary_crossentropy(y_true, y_pred) - log(dice_coefficient(y_true, y_pred) + epsilon())

Compiling the model

In [65]:
model = create_model(False)
model.summary()

model.compile(loss=loss, optimizer='Adam', metrics=[dice_coefficient])
Model: "functional_19"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_17 (InputLayer)           [(None, 224, 224, 3) 0                                            
__________________________________________________________________________________________________
conv1_pad (ZeroPadding2D)       (None, 225, 225, 3)  0           input_17[0][0]                   
__________________________________________________________________________________________________
conv1 (Conv2D)                  (None, 112, 112, 32) 864         conv1_pad[0][0]                  
__________________________________________________________________________________________________
conv1_bn (BatchNormalization)   (None, 112, 112, 32) 128         conv1[0][0]                      
__________________________________________________________________________________________________
conv1_relu (ReLU)               (None, 112, 112, 32) 0           conv1_bn[0][0]                   
__________________________________________________________________________________________________
conv_dw_1 (DepthwiseConv2D)     (None, 112, 112, 32) 288         conv1_relu[0][0]                 
__________________________________________________________________________________________________
conv_dw_1_bn (BatchNormalizatio (None, 112, 112, 32) 128         conv_dw_1[0][0]                  
__________________________________________________________________________________________________
conv_dw_1_relu (ReLU)           (None, 112, 112, 32) 0           conv_dw_1_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_1 (Conv2D)              (None, 112, 112, 64) 2048        conv_dw_1_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_1_bn (BatchNormalizatio (None, 112, 112, 64) 256         conv_pw_1[0][0]                  
__________________________________________________________________________________________________
conv_pw_1_relu (ReLU)           (None, 112, 112, 64) 0           conv_pw_1_bn[0][0]               
__________________________________________________________________________________________________
conv_pad_2 (ZeroPadding2D)      (None, 113, 113, 64) 0           conv_pw_1_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_2 (DepthwiseConv2D)     (None, 56, 56, 64)   576         conv_pad_2[0][0]                 
__________________________________________________________________________________________________
conv_dw_2_bn (BatchNormalizatio (None, 56, 56, 64)   256         conv_dw_2[0][0]                  
__________________________________________________________________________________________________
conv_dw_2_relu (ReLU)           (None, 56, 56, 64)   0           conv_dw_2_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_2 (Conv2D)              (None, 56, 56, 128)  8192        conv_dw_2_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_2_bn (BatchNormalizatio (None, 56, 56, 128)  512         conv_pw_2[0][0]                  
__________________________________________________________________________________________________
conv_pw_2_relu (ReLU)           (None, 56, 56, 128)  0           conv_pw_2_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_3 (DepthwiseConv2D)     (None, 56, 56, 128)  1152        conv_pw_2_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_3_bn (BatchNormalizatio (None, 56, 56, 128)  512         conv_dw_3[0][0]                  
__________________________________________________________________________________________________
conv_dw_3_relu (ReLU)           (None, 56, 56, 128)  0           conv_dw_3_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_3 (Conv2D)              (None, 56, 56, 128)  16384       conv_dw_3_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_3_bn (BatchNormalizatio (None, 56, 56, 128)  512         conv_pw_3[0][0]                  
__________________________________________________________________________________________________
conv_pw_3_relu (ReLU)           (None, 56, 56, 128)  0           conv_pw_3_bn[0][0]               
__________________________________________________________________________________________________
conv_pad_4 (ZeroPadding2D)      (None, 57, 57, 128)  0           conv_pw_3_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_4 (DepthwiseConv2D)     (None, 28, 28, 128)  1152        conv_pad_4[0][0]                 
__________________________________________________________________________________________________
conv_dw_4_bn (BatchNormalizatio (None, 28, 28, 128)  512         conv_dw_4[0][0]                  
__________________________________________________________________________________________________
conv_dw_4_relu (ReLU)           (None, 28, 28, 128)  0           conv_dw_4_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_4 (Conv2D)              (None, 28, 28, 256)  32768       conv_dw_4_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_4_bn (BatchNormalizatio (None, 28, 28, 256)  1024        conv_pw_4[0][0]                  
__________________________________________________________________________________________________
conv_pw_4_relu (ReLU)           (None, 28, 28, 256)  0           conv_pw_4_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_5 (DepthwiseConv2D)     (None, 28, 28, 256)  2304        conv_pw_4_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_5_bn (BatchNormalizatio (None, 28, 28, 256)  1024        conv_dw_5[0][0]                  
__________________________________________________________________________________________________
conv_dw_5_relu (ReLU)           (None, 28, 28, 256)  0           conv_dw_5_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_5 (Conv2D)              (None, 28, 28, 256)  65536       conv_dw_5_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_5_bn (BatchNormalizatio (None, 28, 28, 256)  1024        conv_pw_5[0][0]                  
__________________________________________________________________________________________________
conv_pw_5_relu (ReLU)           (None, 28, 28, 256)  0           conv_pw_5_bn[0][0]               
__________________________________________________________________________________________________
conv_pad_6 (ZeroPadding2D)      (None, 29, 29, 256)  0           conv_pw_5_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_6 (DepthwiseConv2D)     (None, 14, 14, 256)  2304        conv_pad_6[0][0]                 
__________________________________________________________________________________________________
conv_dw_6_bn (BatchNormalizatio (None, 14, 14, 256)  1024        conv_dw_6[0][0]                  
__________________________________________________________________________________________________
conv_dw_6_relu (ReLU)           (None, 14, 14, 256)  0           conv_dw_6_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_6 (Conv2D)              (None, 14, 14, 512)  131072      conv_dw_6_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_6_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_pw_6[0][0]                  
__________________________________________________________________________________________________
conv_pw_6_relu (ReLU)           (None, 14, 14, 512)  0           conv_pw_6_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_7 (DepthwiseConv2D)     (None, 14, 14, 512)  4608        conv_pw_6_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_7_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_dw_7[0][0]                  
__________________________________________________________________________________________________
conv_dw_7_relu (ReLU)           (None, 14, 14, 512)  0           conv_dw_7_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_7 (Conv2D)              (None, 14, 14, 512)  262144      conv_dw_7_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_7_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_pw_7[0][0]                  
__________________________________________________________________________________________________
conv_pw_7_relu (ReLU)           (None, 14, 14, 512)  0           conv_pw_7_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_8 (DepthwiseConv2D)     (None, 14, 14, 512)  4608        conv_pw_7_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_8_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_dw_8[0][0]                  
__________________________________________________________________________________________________
conv_dw_8_relu (ReLU)           (None, 14, 14, 512)  0           conv_dw_8_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_8 (Conv2D)              (None, 14, 14, 512)  262144      conv_dw_8_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_8_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_pw_8[0][0]                  
__________________________________________________________________________________________________
conv_pw_8_relu (ReLU)           (None, 14, 14, 512)  0           conv_pw_8_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_9 (DepthwiseConv2D)     (None, 14, 14, 512)  4608        conv_pw_8_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_9_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_dw_9[0][0]                  
__________________________________________________________________________________________________
conv_dw_9_relu (ReLU)           (None, 14, 14, 512)  0           conv_dw_9_bn[0][0]               
__________________________________________________________________________________________________
conv_pw_9 (Conv2D)              (None, 14, 14, 512)  262144      conv_dw_9_relu[0][0]             
__________________________________________________________________________________________________
conv_pw_9_bn (BatchNormalizatio (None, 14, 14, 512)  2048        conv_pw_9[0][0]                  
__________________________________________________________________________________________________
conv_pw_9_relu (ReLU)           (None, 14, 14, 512)  0           conv_pw_9_bn[0][0]               
__________________________________________________________________________________________________
conv_dw_10 (DepthwiseConv2D)    (None, 14, 14, 512)  4608        conv_pw_9_relu[0][0]             
__________________________________________________________________________________________________
conv_dw_10_bn (BatchNormalizati (None, 14, 14, 512)  2048        conv_dw_10[0][0]                 
__________________________________________________________________________________________________
conv_dw_10_relu (ReLU)          (None, 14, 14, 512)  0           conv_dw_10_bn[0][0]              
__________________________________________________________________________________________________
conv_pw_10 (Conv2D)             (None, 14, 14, 512)  262144      conv_dw_10_relu[0][0]            
__________________________________________________________________________________________________
conv_pw_10_bn (BatchNormalizati (None, 14, 14, 512)  2048        conv_pw_10[0][0]                 
__________________________________________________________________________________________________
conv_pw_10_relu (ReLU)          (None, 14, 14, 512)  0           conv_pw_10_bn[0][0]              
__________________________________________________________________________________________________
conv_dw_11 (DepthwiseConv2D)    (None, 14, 14, 512)  4608        conv_pw_10_relu[0][0]            
__________________________________________________________________________________________________
conv_dw_11_bn (BatchNormalizati (None, 14, 14, 512)  2048        conv_dw_11[0][0]                 
__________________________________________________________________________________________________
conv_dw_11_relu (ReLU)          (None, 14, 14, 512)  0           conv_dw_11_bn[0][0]              
__________________________________________________________________________________________________
conv_pw_11 (Conv2D)             (None, 14, 14, 512)  262144      conv_dw_11_relu[0][0]            
__________________________________________________________________________________________________
conv_pw_11_bn (BatchNormalizati (None, 14, 14, 512)  2048        conv_pw_11[0][0]                 
__________________________________________________________________________________________________
conv_pw_11_relu (ReLU)          (None, 14, 14, 512)  0           conv_pw_11_bn[0][0]              
__________________________________________________________________________________________________
conv_pad_12 (ZeroPadding2D)     (None, 15, 15, 512)  0           conv_pw_11_relu[0][0]            
__________________________________________________________________________________________________
conv_dw_12 (DepthwiseConv2D)    (None, 7, 7, 512)    4608        conv_pad_12[0][0]                
__________________________________________________________________________________________________
conv_dw_12_bn (BatchNormalizati (None, 7, 7, 512)    2048        conv_dw_12[0][0]                 
__________________________________________________________________________________________________
conv_dw_12_relu (ReLU)          (None, 7, 7, 512)    0           conv_dw_12_bn[0][0]              
__________________________________________________________________________________________________
conv_pw_12 (Conv2D)             (None, 7, 7, 1024)   524288      conv_dw_12_relu[0][0]            
__________________________________________________________________________________________________
conv_pw_12_bn (BatchNormalizati (None, 7, 7, 1024)   4096        conv_pw_12[0][0]                 
__________________________________________________________________________________________________
conv_pw_12_relu (ReLU)          (None, 7, 7, 1024)   0           conv_pw_12_bn[0][0]              
__________________________________________________________________________________________________
conv_dw_13 (DepthwiseConv2D)    (None, 7, 7, 1024)   9216        conv_pw_12_relu[0][0]            
__________________________________________________________________________________________________
conv_dw_13_bn (BatchNormalizati (None, 7, 7, 1024)   4096        conv_dw_13[0][0]                 
__________________________________________________________________________________________________
conv_dw_13_relu (ReLU)          (None, 7, 7, 1024)   0           conv_dw_13_bn[0][0]              
__________________________________________________________________________________________________
conv_pw_13 (Conv2D)             (None, 7, 7, 1024)   1048576     conv_dw_13_relu[0][0]            
__________________________________________________________________________________________________
conv_pw_13_bn (BatchNormalizati (None, 7, 7, 1024)   4096        conv_pw_13[0][0]                 
__________________________________________________________________________________________________
conv_pw_13_relu (ReLU)          (None, 7, 7, 1024)   0           conv_pw_13_bn[0][0]              
__________________________________________________________________________________________________
up_sampling2d_27 (UpSampling2D) (None, 14, 14, 1024) 0           conv_pw_13_relu[0][0]            
__________________________________________________________________________________________________
concatenate_26 (Concatenate)    (None, 14, 14, 1536) 0           up_sampling2d_27[0][0]           
                                                                 conv_pw_11_relu[0][0]            
__________________________________________________________________________________________________
up_sampling2d_28 (UpSampling2D) (None, 28, 28, 1536) 0           concatenate_26[0][0]             
__________________________________________________________________________________________________
concatenate_27 (Concatenate)    (None, 28, 28, 1792) 0           up_sampling2d_28[0][0]           
                                                                 conv_pw_5_relu[0][0]             
__________________________________________________________________________________________________
up_sampling2d_29 (UpSampling2D) (None, 56, 56, 1792) 0           concatenate_27[0][0]             
__________________________________________________________________________________________________
concatenate_28 (Concatenate)    (None, 56, 56, 1920) 0           up_sampling2d_29[0][0]           
                                                                 conv_pw_3_relu[0][0]             
__________________________________________________________________________________________________
up_sampling2d_30 (UpSampling2D) (None, 112, 112, 192 0           concatenate_28[0][0]             
__________________________________________________________________________________________________
concatenate_29 (Concatenate)    (None, 112, 112, 198 0           up_sampling2d_30[0][0]           
                                                                 conv_pw_1_relu[0][0]             
__________________________________________________________________________________________________
up_sampling2d_31 (UpSampling2D) (None, 224, 224, 198 0           concatenate_29[0][0]             
__________________________________________________________________________________________________
conv2d_12 (Conv2D)              (None, 224, 224, 1)  1985        up_sampling2d_31[0][0]           
__________________________________________________________________________________________________
reshape_12 (Reshape)            (None, 224, 224)     0           conv2d_12[0][0]                  
==================================================================================================
Total params: 3,230,849
Trainable params: 1,985
Non-trainable params: 3,228,864
__________________________________________________________________________________________________

Making predictions

In [66]:
model.fit(X_train,masks,epochs = 10,verbose=1,batch_size=1)
Epoch 1/20
409/409 [==============================] - 481s 1s/step - loss: 1.1554 - dice_coefficient: 0.4909
Epoch 2/20
409/409 [==============================] - 476s 1s/step - loss: 0.8769 - dice_coefficient: 0.5809
Epoch 3/20
409/409 [==============================] - 474s 1s/step - loss: 0.8247 - dice_coefficient: 0.5998
Epoch 4/20
409/409 [==============================] - 474s 1s/step - loss: 0.7982 - dice_coefficient: 0.6105
Epoch 5/20
409/409 [==============================] - 474s 1s/step - loss: 0.7846 - dice_coefficient: 0.6164
Epoch 6/20
409/409 [==============================] - 499s 1s/step - loss: 0.7740 - dice_coefficient: 0.6204
Epoch 7/20
409/409 [==============================] - 488s 1s/step - loss: 0.7598 - dice_coefficient: 0.6257
Epoch 8/20
409/409 [==============================] - 477s 1s/step - loss: 0.7434 - dice_coefficient: 0.6328
Epoch 9/20
409/409 [==============================] - 335s 818ms/step - loss: 0.7363 - dice_coefficient: 0.6364
Epoch 10/20
409/409 [==============================] - 283s 692ms/step - loss: 0.7674 - dice_coefficient: 0.6292
Epoch 11/20
409/409 [==============================] - 285s 697ms/step - loss: 0.7338 - dice_coefficient: 0.6396
Epoch 12/20
409/409 [==============================] - 288s 704ms/step - loss: 0.7242 - dice_coefficient: 0.6430
Epoch 13/20
409/409 [==============================] - 285s 696ms/step - loss: 0.7208 - dice_coefficient: 0.6423
Epoch 14/20
409/409 [==============================] - 286s 700ms/step - loss: 0.7258 - dice_coefficient: 0.6420
Epoch 15/20
409/409 [==============================] - 286s 699ms/step - loss: 0.7156 - dice_coefficient: 0.6480
Epoch 16/20
409/409 [==============================] - 285s 696ms/step - loss: 0.7159 - dice_coefficient: 0.6469
Epoch 17/20
409/409 [==============================] - 286s 699ms/step - loss: 0.7066 - dice_coefficient: 0.6511
Epoch 18/20
409/409 [==============================] - 287s 701ms/step - loss: 0.7167 - dice_coefficient: 0.6474
Epoch 19/20
409/409 [==============================] - 283s 691ms/step - loss: 0.7139 - dice_coefficient: 0.6494
Epoch 20/20
409/409 [==============================] - 347s 848ms/step - loss: 0.7066 - dice_coefficient: 0.6532
Out[66]:
<tensorflow.python.keras.callbacks.History at 0x1d13feb2a30>

---------------------------------------------------------------------------------------------------------

PART - TWO

Curation of the bounding box co-ordinates for each image (automated)

In [32]:
import numpy as np
import cv2
import glob

# Using the Haar Cascade classifier
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
In [51]:
# Storing the paths of all images present in the directory, in a list
images_list = glob.glob('C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/training_images/*')
In [53]:
# Finding out the number of images present in the directory
print('The number of images found is: ',len('C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/training_images\\'))
Out[53]:
79
In [54]:
# Storing only the image names in the images_list list
for i in range(len(images_list)):
    images_list[i] = images_list[i][79:]
#     print(i)
images_list
Out[54]:
['real_00001.jpg',
 'real_00002.jpg',
 'real_00003.jpg',
 'real_00004.jpg',
 'real_00005.jpg',
 'real_00006.jpg',
 'real_00007.jpg',
 'real_00008.jpg',
 'real_00009.jpg',
 'real_00010.jpg',
 'real_00011.jpg',
 'real_00012.jpg',
 'real_00013.jpg',
 'real_00014.jpg',
 'real_00015.jpg',
 'real_00016.jpg',
 'real_00017.jpg',
 'real_00018.jpg',
 'real_00019.jpg',
 'real_00020.jpg',
 'real_00021.jpg',
 'real_00022.jpg',
 'real_00023.jpg',
 'real_00024.jpg',
 'real_00025.jpg',
 'real_00026.jpg',
 'real_00027.jpg',
 'real_00028.jpg',
 'real_00029.jpg',
 'real_00030.jpg',
 'real_00031.jpg',
 'real_00032.jpg',
 'real_00033.jpg',
 'real_00034.jpg',
 'real_00035.jpg',
 'real_00036.jpg',
 'real_00037.jpg',
 'real_00038.jpg',
 'real_00039.jpg',
 'real_00040.jpg',
 'real_00041.jpg',
 'real_00042.jpg',
 'real_00043.jpg',
 'real_00044.jpg',
 'real_00045.jpg',
 'real_00046.jpg',
 'real_00047.jpg',
 'real_00048.jpg',
 'real_00049.jpg',
 'real_00050.jpg',
 'real_00051.jpg',
 'real_00052.jpg',
 'real_00053.jpg',
 'real_00054.jpg',
 'real_00055.jpg',
 'real_00056.jpg',
 'real_00057.jpg',
 'real_00058.jpg',
 'real_00059.jpg',
 'real_00060.jpg',
 'real_00061.jpg',
 'real_00062.jpg',
 'real_00063.jpg',
 'real_00064.jpg',
 'real_00065.jpg',
 'real_00066.jpg',
 'real_00067.jpg',
 'real_00068.jpg',
 'real_00069.jpg',
 'real_00070.jpg',
 'real_00071.jpg',
 'real_00072.jpg',
 'real_00073.jpg',
 'real_00074.jpg',
 'real_00075.jpg',
 'real_00076.jpg',
 'real_00077.jpg',
 'real_00078.jpg',
 'real_00079.jpg',
 'real_00080.jpg',
 'real_00081.jpg',
 'real_00082.jpg',
 'real_00083.jpg',
 'real_00084.jpg',
 'real_00085.jpg',
 'real_00086.jpg',
 'real_00087.jpg',
 'real_00088.jpg',
 'real_00089.jpg',
 'real_00090.jpg',
 'real_00091.jpg',
 'real_00092.jpg',
 'real_00093.jpg',
 'real_00094.jpg',
 'real_00095.jpg',
 'real_00096.jpg',
 'real_00097.jpg',
 'real_00098.jpg',
 'real_00099.jpg',
 'real_00100.jpg',
 'real_00101.jpg',
 'real_00102.jpg',
 'real_00103.jpg',
 'real_00104.jpg',
 'real_00105.jpg',
 'real_00106.jpg',
 'real_00107.jpg',
 'real_00108.jpg',
 'real_00109.jpg',
 'real_00110.jpg',
 'real_00111.jpg',
 'real_00112.jpg',
 'real_00113.jpg',
 'real_00114.jpg',
 'real_00115.jpg',
 'real_00116.jpg',
 'real_00117.jpg',
 'real_00118.jpg',
 'real_00119.jpg',
 'real_00120.jpg',
 'real_00121.jpg',
 'real_00122.jpg',
 'real_00123.jpg',
 'real_00124.jpg',
 'real_00125.jpg',
 'real_00126.jpg',
 'real_00127.jpg',
 'real_00128.jpg',
 'real_00129.jpg',
 'real_00130.jpg',
 'real_00131.jpg',
 'real_00132.jpg',
 'real_00133.jpg',
 'real_00134.jpg',
 'real_00135.jpg',
 'real_00136.jpg',
 'real_00137.jpg',
 'real_00138.jpg',
 'real_00139.jpg',
 'real_00140.jpg',
 'real_00141.jpg',
 'real_00142.jpg',
 'real_00143.jpg',
 'real_00144.jpg',
 'real_00145.jpg',
 'real_00146.jpg',
 'real_00147.jpg',
 'real_00148.jpg',
 'real_00149.jpg',
 'real_00150.jpg',
 'real_00151.jpg',
 'real_00152.jpg',
 'real_00153.jpg',
 'real_00154.jpg',
 'real_00155.jpg',
 'real_00156.jpg',
 'real_00157.jpg',
 'real_00158.jpg',
 'real_00159.jpg',
 'real_00160.jpg',
 'real_00161.jpg',
 'real_00162.jpg',
 'real_00163.jpg',
 'real_00164.jpg',
 'real_00165.jpg',
 'real_00166.jpg',
 'real_00167.jpg',
 'real_00168.jpg',
 'real_00169.jpg',
 'real_00170.jpg',
 'real_00171.jpg',
 'real_00172.jpg',
 'real_00173.jpg',
 'real_00174.jpg',
 'real_00175.jpg',
 'real_00176.jpg',
 'real_00177.jpg',
 'real_00178.jpg',
 'real_00179.jpg',
 'real_00180.jpg',
 'real_00181.jpg',
 'real_00182.jpg',
 'real_00183.jpg',
 'real_00184.jpg',
 'real_00185.jpg',
 'real_00186.jpg',
 'real_00187.jpg',
 'real_00188.jpg',
 'real_00189.jpg',
 'real_00190.jpg',
 'real_00191.jpg',
 'real_00192.jpg',
 'real_00193.jpg',
 'real_00194.jpg',
 'real_00195.jpg',
 'real_00196.jpg',
 'real_00197.jpg',
 'real_00198.jpg',
 'real_00199.jpg',
 'real_00200.jpg',
 'real_00201.jpg',
 'real_00202.jpg',
 'real_00203.jpg',
 'real_00204.jpg',
 'real_00205.jpg',
 'real_00206.jpg',
 'real_00207.jpg',
 'real_00208.jpg',
 'real_00209.jpg',
 'real_00210.jpg',
 'real_00211.jpg',
 'real_00212.jpg',
 'real_00213.jpg',
 'real_00214.jpg',
 'real_00215.jpg',
 'real_00216.jpg',
 'real_00217.jpg',
 'real_00218.jpg',
 'real_00219.jpg',
 'real_00220.jpg',
 'real_00221.jpg',
 'real_00222.jpg',
 'real_00223.jpg',
 'real_00224.jpg',
 'real_00225.jpg',
 'real_00226.jpg',
 'real_00227.jpg',
 'real_00228.jpg',
 'real_00229.jpg',
 'real_00230.jpg',
 'real_00231.jpg',
 'real_00232.jpg',
 'real_00233.jpg',
 'real_00234.jpg',
 'real_00235.jpg',
 'real_00236.jpg',
 'real_00237.jpg',
 'real_00238.jpg',
 'real_00239.jpg',
 'real_00240.jpg',
 'real_00241.jpg',
 'real_00242.jpg',
 'real_00243.jpg',
 'real_00244.jpg',
 'real_00245.jpg',
 'real_00246.jpg',
 'real_00247.jpg',
 'real_00248.jpg',
 'real_00249.jpg',
 'real_00250.jpg',
 'real_00251.jpg',
 'real_00252.jpg',
 'real_00253.jpg',
 'real_00254.jpg',
 'real_00255.jpg',
 'real_00256.jpg',
 'real_00257.jpg',
 'real_00258.jpg',
 'real_00259.jpg',
 'real_00260.jpg',
 'real_00261.jpg',
 'real_00262.jpg',
 'real_00263.jpg',
 'real_00264.jpg',
 'real_00265.jpg',
 'real_00266.jpg',
 'real_00267.jpg',
 'real_00268.jpg',
 'real_00269.jpg',
 'real_00270.jpg',
 'real_00271.jpg',
 'real_00272.jpg',
 'real_00273.jpg',
 'real_00274.jpg',
 'real_00275.jpg',
 'real_00276.jpg',
 'real_00277.jpg',
 'real_00278.jpg',
 'real_00279.jpg',
 'real_00280.jpg',
 'real_00281.jpg',
 'real_00282.jpg',
 'real_00283.jpg',
 'real_00284.jpg',
 'real_00285.jpg',
 'real_00286.jpg',
 'real_00287.jpg',
 'real_00288.jpg',
 'real_00289.jpg',
 'real_00290.jpg',
 'real_00291.jpg',
 'real_00292.jpg',
 'real_00293.jpg',
 'real_00294.jpg',
 'real_00295.jpg',
 'real_00296.jpg',
 'real_00297.jpg',
 'real_00298.jpg',
 'real_00299.jpg',
 'real_00300.jpg',
 'real_00301.jpg',
 'real_00302.jpg',
 'real_00303.jpg',
 'real_00304.jpg',
 'real_00305.jpg',
 'real_00306.jpg',
 'real_00307.jpg',
 'real_00308.jpg',
 'real_00309.jpg',
 'real_00310.jpg',
 'real_00311.jpg',
 'real_00312.jpg',
 'real_00313.jpg',
 'real_00314.jpg',
 'real_00315.jpg',
 'real_00316.jpg',
 'real_00317.jpg',
 'real_00318(1).jpg',
 'real_00318.jpg',
 'real_00319(1).jpg',
 'real_00319.jpg',
 'real_00320.jpg',
 'real_00321.jpg',
 'real_00322.jpg',
 'real_00323.jpg',
 'real_00324.jpg',
 'real_00325.jpg',
 'real_00326.jpg',
 'real_00327.jpg',
 'real_00328.jpg',
 'real_00329.jpg',
 'real_00330.jpg',
 'real_00331(1).jpg',
 'real_00331.jpg',
 'real_00332.jpg',
 'real_00333.jpg',
 'real_00334.jpg',
 'real_00335.jpg',
 'real_00336.jpg',
 'real_00337.jpg',
 'real_00338.jpg',
 'real_00339.jpg',
 'real_00340.jpg',
 'real_00341.jpg',
 'real_00342.jpg',
 'real_00343.jpg',
 'real_00344.jpg',
 'real_00345.jpg',
 'real_00346.jpg',
 'real_00347.jpg',
 'real_00348.jpg',
 'real_00349.jpg',
 'real_00350.jpg',
 'real_00351.jpg',
 'real_00352.jpg',
 'real_00353.jpg',
 'real_00354.jpg',
 'real_00355.jpg',
 'real_00356.jpg',
 'real_00357.jpg',
 'real_00358.jpg',
 'real_00359.jpg',
 'real_00360.jpg',
 'real_00361.jpg',
 'real_00362.jpg',
 'real_00363.jpg',
 'real_00364.jpg',
 'real_00365.jpg',
 'real_00366.jpg',
 'real_00367.jpg',
 'real_00368.jpg',
 'real_00369.jpg',
 'real_00370.jpg',
 'real_00371.jpg',
 'real_00372.jpg',
 'real_00373.jpg',
 'real_00374.jpg',
 'real_00375.jpg',
 'real_00376.jpg',
 'real_00377.jpg',
 'real_00378.jpg',
 'real_00379.jpg',
 'real_00380.jpg',
 'real_00381.jpg',
 'real_00382.jpg',
 'real_00383.jpg',
 'real_00384.jpg',
 'real_00385.jpg',
 'real_00386.jpg',
 'real_00387.jpg',
 'real_00388.jpg',
 'real_00389.jpg',
 'real_00390.jpg',
 'real_00391.jpg',
 'real_00392.jpg',
 'real_00393.jpg',
 'real_00394.jpg',
 'real_00395.jpg',
 'real_00396.jpg',
 'real_00397.jpg',
 'real_00398.jpg',
 'real_00399.jpg',
 'real_00400.jpg',
 'real_00401.jpg',
 'real_00402.jpg',
 'real_00403.jpg',
 'real_00404.jpg',
 'real_00405.jpg',
 'real_00406.jpg',
 'real_00407.jpg',
 'real_00408.jpg',
 'real_00409.jpg',
 'real_00410.jpg',
 'real_00411.jpg',
 'real_00412.jpg',
 'real_00413.jpg',
 'real_00414.jpg',
 'real_00415.jpg',
 'real_00416.jpg',
 'real_00417.jpg',
 'real_00418.jpg',
 'real_00419.jpg',
 'real_00420.jpg',
 'real_00421.jpg',
 'real_00422.jpg',
 'real_00423.jpg',
 'real_00424.jpg',
 'real_00425.jpg',
 'real_00426.jpg',
 'real_00427.jpg',
 'real_00428.jpg',
 'real_00429.jpg',
 'real_00430.jpg',
 'real_00431.jpg',
 'real_00432.jpg',
 'real_00433.jpg',
 'real_00434.jpg',
 'real_00435.jpg',
 'real_00436.jpg',
 'real_00437.jpg',
 'real_00438.jpg',
 'real_00439.jpg',
 'real_00440.jpg',
 'real_00441.jpg',
 'real_00442.jpg',
 'real_00443.jpg',
 'real_00444.jpg',
 'real_00445.jpg',
 'real_00446.jpg',
 'real_00447.jpg',
 'real_00448.jpg',
 'real_00449.jpg',
 'real_00450.jpg',
 'real_00451.jpg',
 'real_00452.jpg',
 'real_00453.jpg',
 'real_00454.jpg',
 'real_00455.jpg',
 'real_00456(1).jpg',
 'real_00456.jpg',
 'real_00457.jpg',
 'real_00458.jpg',
 'real_00459.jpg',
 'real_00460.jpg',
 'real_00461.jpg',
 'real_00462.jpg',
 'real_00463.jpg',
 'real_00464.jpg',
 'real_00465.jpg',
 'real_00466.jpg',
 'real_00467.jpg',
 'real_00468.jpg',
 'real_00469.jpg',
 'real_00470.jpg',
 'real_00471.jpg',
 'real_00472.jpg',
 'real_00473.jpg',
 'real_00474.jpg',
 'real_00475.jpg',
 'real_00476.jpg',
 'real_00477.jpg',
 'real_00478.jpg',
 'real_00479.jpg',
 'real_00480(1).jpg',
 'real_00480.jpg',
 'real_00481(1).jpg',
 'real_00481.jpg',
 'real_00482.jpg',
 'real_00483.jpg',
 'real_00484.jpg',
 'real_00485.jpg',
 'real_00486.jpg',
 'real_00487.jpg',
 'real_00488.jpg',
 'real_00489.jpg',
 'real_00490.jpg',
 'real_00491.jpg',
 'real_00492.jpg',
 'real_00493.jpg',
 'real_00494(1).jpg',
 'real_00494.jpg',
 'real_00495(1).jpg',
 'real_00495.jpg',
 'real_00496.jpg',
 'real_00497.jpg',
 'real_00498.jpg',
 'real_00499.jpg',
 'real_00500.jpg',
 'real_00501.jpg',
 'real_00502.jpg',
 'real_00503.jpg',
 'real_00504.jpg',
 'real_00505.jpg',
 'real_00506.jpg',
 'real_00507.jpg',
 'real_00508.jpg',
 'real_00509.jpg',
 'real_00510.jpg',
 'real_00511.jpg',
 'real_00512.jpg',
 'real_00513.jpg',
 'real_00514.jpg',
 'real_00515.jpg',
 'real_00516.jpg',
 'real_00517.jpg',
 'real_00518.jpg',
 'real_00519.jpg',
 'real_00520.jpg',
 'real_00521.jpg',
 'real_00522.jpg',
 'real_00523.jpg',
 'real_00524.jpg',
 'real_00525.jpg',
 'real_00526.jpg',
 'real_00527.jpg',
 'real_00528.jpg',
 'real_00529.jpg',
 'real_00530.jpg',
 'real_00531.jpg',
 'real_00532.jpg',
 'real_00533.jpg',
 'real_00534.jpg',
 'real_00535.jpg',
 'real_00536.jpg',
 'real_00537.jpg',
 'real_00538.jpg',
 'real_00539.jpg',
 'real_00540.jpg',
 'real_00541.jpg',
 'real_00542.jpg',
 'real_00543.jpg',
 'real_00544.jpg',
 'real_00545.jpg',
 'real_00546.jpg',
 'real_00547.jpg',
 'real_00548.jpg',
 'real_00549.jpg',
 'real_00550.jpg',
 'real_00551.jpg',
 'real_00552.jpg',
 'real_00553.jpg',
 'real_00554.jpg',
 'real_00555.jpg',
 'real_00556.jpg',
 'real_00557.jpg',
 'real_00558.jpg',
 'real_00559.jpg',
 'real_00560.jpg',
 'real_00561.jpg',
 'real_00562.jpg',
 'real_00563.jpg',
 'real_00564.jpg',
 'real_00565.jpg',
 'real_00566.jpg',
 'real_00567.jpg',
 'real_00568.jpg',
 'real_00569.jpg',
 'real_00570.jpg',
 'real_00571.jpg',
 'real_00572.jpg',
 'real_00573.jpg',
 'real_00574.jpg',
 'real_00575.jpg',
 'real_00576.jpg',
 'real_00577.jpg',
 'real_00578.jpg',
 'real_00579.jpg',
 'real_00580.jpg',
 'real_00581.jpg',
 'real_00582.jpg',
 'real_00583.jpg',
 'real_00584.jpg',
 'real_00585.jpg',
 'real_00586.jpg',
 'real_00587.jpg',
 'real_00588.jpg',
 'real_00589.jpg',
 'real_00590.jpg',
 'real_00591.jpg',
 'real_00592.jpg',
 'real_00593.jpg',
 'real_00594.jpg',
 'real_00595.jpg',
 'real_00596.jpg',
 'real_00597.jpg',
 'real_00598.jpg',
 'real_00599.jpg',
 'real_00600.jpg',
 'real_00601.jpg',
 'real_00602.jpg',
 'real_00603.jpg',
 'real_00604.jpg',
 'real_00605.jpg',
 'real_00606.jpg',
 'real_00607.jpg',
 'real_00608.jpg',
 'real_00609.jpg',
 'real_00610.jpg',
 'real_00611.jpg',
 'real_00612.jpg',
 'real_00613.jpg',
 'real_00614.jpg',
 'real_00615.jpg',
 'real_00616.jpg',
 'real_00617.jpg',
 'real_00618.jpg',
 'real_00619.jpg',
 'real_00620.jpg',
 'real_00621.jpg',
 'real_00622.jpg',
 'real_00623.jpg',
 'real_00624.jpg',
 'real_00625.jpg',
 'real_00626.jpg',
 'real_00627.jpg',
 'real_00628.jpg',
 'real_00629.jpg',
 'real_00630.jpg',
 'real_00631.jpg',
 'real_00632.jpg',
 'real_00633.jpg',
 'real_00634.jpg',
 'real_00635.jpg',
 'real_00636.jpg',
 'real_00637.jpg',
 'real_00638.jpg',
 'real_00639.jpg',
 'real_00640.jpg',
 'real_00641.jpg',
 'real_00642.jpg',
 'real_00643.jpg',
 'real_00644.jpg',
 'real_00645.jpg',
 'real_00646.jpg',
 'real_00647.jpg',
 'real_00648.jpg',
 'real_00649.jpg',
 'real_00650.jpg',
 'real_00651.jpg',
 'real_00652.jpg',
 'real_00653.jpg',
 'real_00654.jpg',
 'real_00655.jpg',
 'real_00656.jpg',
 'real_00657.jpg',
 'real_00658.jpg',
 'real_00659.jpg',
 'real_00660.jpg',
 'real_00661.jpg',
 'real_00662.jpg',
 'real_00663.jpg',
 'real_00664.jpg',
 'real_00665.jpg',
 'real_00666.jpg',
 'real_00667.jpg',
 'real_00668.jpg',
 'real_00669.jpg',
 'real_00670.jpg',
 'real_00671.jpg',
 'real_00672.jpg',
 'real_00673.jpg',
 'real_00674.jpg',
 'real_00675.jpg',
 'real_00676.jpg',
 'real_00677.jpg',
 'real_00678.jpg',
 'real_00679.jpg',
 'real_00680.jpg',
 'real_00681.jpg',
 'real_00682.jpg',
 'real_00683.jpg',
 'real_00684.jpg',
 'real_00685.jpg',
 'real_00686.jpg',
 'real_00687.jpg',
 'real_00688.jpg',
 'real_00689.jpg',
 'real_00690.jpg',
 'real_00691.jpg',
 'real_00692.jpg',
 'real_00693.jpg',
 'real_00694.jpg',
 'real_00695.jpg',
 'real_00696.jpg',
 'real_00697.jpg',
 'real_00698.jpg',
 'real_00699.jpg',
 'real_00700.jpg',
 'real_00701.jpg',
 'real_00702.jpg',
 'real_00703.jpg',
 'real_00704.jpg',
 'real_00705.jpg',
 'real_00706.jpg',
 'real_00707.jpg',
 'real_00708.jpg',
 'real_00709.jpg',
 'real_00710.jpg',
 'real_00711.jpg',
 'real_00712.jpg',
 'real_00713.jpg',
 'real_00714.jpg',
 'real_00715.jpg',
 'real_00716.jpg',
 'real_00717.jpg',
 'real_00718.jpg',
 'real_00719.jpg',
 'real_00720.jpg',
 'real_00721.jpg',
 'real_00722.jpg',
 'real_00723.jpg',
 'real_00724.jpg',
 'real_00725.jpg',
 'real_00726.jpg',
 'real_00727.jpg',
 'real_00728.jpg',
 'real_00729.jpg',
 'real_00730.jpg',
 'real_00731.jpg',
 'real_00732.jpg',
 'real_00733.jpg',
 'real_00734.jpg',
 'real_00735.jpg',
 'real_00736.jpg',
 'real_00737.jpg',
 'real_00738.jpg',
 'real_00739.jpg',
 'real_00740.jpg',
 'real_00741.jpg',
 'real_00742.jpg',
 'real_00743.jpg',
 'real_00744.jpg',
 'real_00745.jpg',
 'real_00746.jpg',
 'real_00747.jpg',
 'real_00748.jpg',
 'real_00749.jpg',
 'real_00750.jpg',
 'real_00751.jpg',
 'real_00752.jpg',
 'real_00753.jpg',
 'real_00754.jpg',
 'real_00755.jpg',
 'real_00756.jpg',
 'real_00757.jpg',
 'real_00758.jpg',
 'real_00759.jpg',
 'real_00760.jpg',
 'real_00761.jpg',
 'real_00762.jpg',
 'real_00763.jpg',
 'real_00764.jpg',
 'real_00765.jpg',
 'real_00766.jpg',
 'real_00767.jpg',
 'real_00768.jpg',
 'real_00769.jpg',
 'real_00770.jpg',
 'real_00771.jpg',
 'real_00772.jpg',
 'real_00773.jpg',
 'real_00774.jpg',
 'real_00775.jpg',
 'real_00776.jpg',
 'real_00777.jpg',
 'real_00778.jpg',
 'real_00779.jpg',
 'real_00780.jpg',
 'real_00781.jpg',
 'real_00782.jpg',
 'real_00783.jpg',
 'real_00784.jpg',
 'real_00785.jpg',
 'real_00786.jpg',
 'real_00787.jpg',
 'real_00788.jpg',
 'real_00789.jpg',
 'real_00790.jpg',
 'real_00791.jpg',
 'real_00792.jpg',
 'real_00793.jpg',
 'real_00794.jpg',
 'real_00795.jpg',
 'real_00796.jpg',
 'real_00797.jpg',
 'real_00798.jpg',
 'real_00799.jpg',
 'real_00800.jpg',
 'real_00801.jpg',
 'real_00802.jpg',
 'real_00803.jpg',
 'real_00804.jpg',
 'real_00805.jpg',
 'real_00806.jpg',
 'real_00807.jpg',
 'real_00808.jpg',
 'real_00809.jpg',
 'real_00810.jpg',
 'real_00811.jpg',
 'real_00812.jpg',
 'real_00813.jpg',
 'real_00814.jpg',
 'real_00815.jpg',
 'real_00816.jpg',
 'real_00817.jpg',
 'real_00818.jpg',
 'real_00819.jpg',
 'real_00820.jpg',
 'real_00821.jpg',
 'real_00822.jpg',
 'real_00823.jpg',
 'real_00824.jpg',
 'real_00825.jpg',
 'real_00826.jpg',
 'real_00827.jpg',
 'real_00828.jpg',
 'real_00829.jpg',
 'real_00830.jpg',
 'real_00831.jpg',
 'real_00832.jpg',
 'real_00833.jpg',
 'real_00834.jpg',
 'real_00835.jpg',
 'real_00836.jpg',
 'real_00837.jpg',
 'real_00838.jpg',
 'real_00839.jpg',
 'real_00840.jpg',
 'real_00841.jpg',
 'real_00842.jpg',
 'real_00843.jpg',
 'real_00844.jpg',
 'real_00845.jpg',
 'real_00846.jpg',
 'real_00847.jpg',
 'real_00848.jpg',
 'real_00849.jpg',
 'real_00850.jpg',
 'real_00851.jpg',
 'real_00852.jpg',
 'real_00853.jpg',
 'real_00854.jpg',
 'real_00855.jpg',
 'real_00856.jpg',
 'real_00857.jpg',
 'real_00858.jpg',
 'real_00859.jpg',
 'real_00860.jpg',
 'real_00861.jpg',
 'real_00862.jpg',
 'real_00863.jpg',
 'real_00864.jpg',
 'real_00865.jpg',
 'real_00866.jpg',
 'real_00867.jpg',
 'real_00868.jpg',
 'real_00869.jpg',
 'real_00870.jpg',
 'real_00871.jpg',
 'real_00872.jpg',
 'real_00873.jpg',
 'real_00874.jpg',
 'real_00875.jpg',
 'real_00876.jpg',
 'real_00877.jpg',
 'real_00878.jpg',
 'real_00879.jpg',
 'real_00880.jpg',
 'real_00881.jpg',
 'real_00882.jpg',
 'real_00883.jpg',
 'real_00884.jpg',
 'real_00885.jpg',
 'real_00886.jpg',
 'real_00887.jpg',
 'real_00888.jpg',
 'real_00889.jpg',
 'real_00890.jpg',
 'real_00891.jpg',
 'real_00892.jpg',
 'real_00893.jpg',
 'real_00894.jpg',
 'real_00895.jpg',
 'real_00896.jpg',
 'real_00897.jpg',
 'real_00898.jpg',
 'real_00899.jpg',
 'real_00900.jpg',
 'real_00901.jpg',
 'real_00902.jpg',
 'real_00903.jpg',
 'real_00904.jpg',
 'real_00905.jpg',
 'real_00906.jpg',
 'real_00907.jpg',
 'real_00908.jpg',
 'real_00909.jpg',
 'real_00910.jpg',
 'real_00911.jpg',
 'real_00912.jpg',
 'real_00913.jpg',
 'real_00914.jpg',
 'real_00915.jpg',
 'real_00916.jpg',
 'real_00917.jpg',
 'real_00918.jpg',
 'real_00919.jpg',
 'real_00920.jpg',
 'real_00921.jpg',
 'real_00922.jpg',
 'real_00923.jpg',
 'real_00924.jpg',
 'real_00925.jpg',
 'real_00926.jpg',
 'real_00927.jpg',
 'real_00928.jpg',
 'real_00929.jpg',
 'real_00930.jpg',
 'real_00931.jpg',
 'real_00932.jpg',
 'real_00933.jpg',
 'real_00934.jpg',
 'real_00935.jpg',
 'real_00936.jpg',
 'real_00937.jpg',
 'real_00938.jpg',
 'real_00939.jpg',
 'real_00940.jpg',
 'real_00941.jpg',
 'real_00942.jpg',
 'real_00943.jpg',
 'real_00944.jpg',
 'real_00945.jpg',
 'real_00946.jpg',
 'real_00947.jpg',
 'real_00948.jpg',
 'real_00949.jpg',
 'real_00950.jpg',
 'real_00951.jpg',
 'real_00952.jpg',
 'real_00953.jpg',
 'real_00954.jpg',
 'real_00955.jpg',
 'real_00956.jpg',
 'real_00957.jpg',
 'real_00958.jpg',
 'real_00959.jpg',
 'real_00960.jpg',
 'real_00961.jpg',
 'real_00962.jpg',
 'real_00963.jpg',
 'real_00964.jpg',
 'real_00965.jpg',
 'real_00966.jpg',
 'real_00967.jpg',
 'real_00968.jpg',
 'real_00969.jpg',
 'real_00970.jpg',
 'real_00971.jpg',
 'real_00972.jpg',
 'real_00973.jpg',
 'real_00974.jpg',
 'real_00975.jpg',
 'real_00976.jpg',
 'real_00977.jpg',
 'real_00978.jpg',
 'real_00979.jpg',
 'real_00980.jpg',
 'real_00981.jpg',
 'real_00982.jpg',
 'real_00983.jpg',
 'real_00984.jpg',
 'real_00985.jpg',
 'real_00986.jpg',
 'real_00987.jpg',
 'real_00988.jpg',
 'real_00989.jpg',
 'real_00990.jpg',
 'real_00991.jpg',
 'real_00992.jpg',
 ...]
In [55]:
import pandas as pd
df = pd.DataFrame(data=[],columns=['x','y','w','h','Total_Faces','Image_Name'])
for image in images_list:
    name = image
    img = cv2.imread('C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/training_images/' + image)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.1, 5)
    # print('number of faces:')
    # print(len(faces))
    for (x,y,w,h) in faces:
        l = []
        l.append(x)
        l.append(y)
        l.append(w)
        l.append(h)
        l.append(len(faces))
        l.append(name)
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]
        df2 = pd.DataFrame(data=[l],columns=['x','y','w','h','Total_Faces','Image_Name'])
        df = df.append(df2)
#     cv2.imshow('img',img)
#     cv2.waitKey(0)
In [56]:
df.head()
Out[56]:
x y w h Total_Faces Image_Name
0 146 140 428 428 1 real_00001.jpg
0 80 140 436 436 1 real_00002.jpg
0 33 121 362 362 1 real_00003.jpg
0 134 173 356 356 1 real_00004.jpg
0 61 62 472 472 1 real_00006.jpg

---------------------------------------------------------------------------------------------------------

PART - THREE

Using a pre-trained model trained on Face recognition to recognise similar faces

In [1]:
# Imports
import pandas as pd, numpy as np, matplotlib.pyplot as plt, sklearn, re, random
import matplotlib.gridspec as gridspec
from tqdm.notebook import tqdm
import tensorflow, cv2
%matplotlib inline

# Extract content from zipfile
from zipfile import ZipFile

# Model
from tensorflow.keras.layers import ZeroPadding2D, Convolution2D, MaxPooling2D, Dropout, Flatten, Activation
from tensorflow.keras.models import Sequential, Model
from sklearn.svm import SVC

# Encode, standardize and PCA
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
from sklearn.model_selection import RandomizedSearchCV, GridSearchCV
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.decomposition import PCA
In [2]:
import glob
pins = glob.glob('C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS/*')
pins
Out[2]:
['C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Aaron Paul',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_alexandra daddario',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Alvaro Morte',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_alycia debnam carey face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Amanda Crew',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Amaury Nolasco',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_amber heard face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Anna Gunn',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_anne hathaway',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_barbara palvin face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_bellamy blake face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Benedict Cumberbatch',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Betsy Brandt',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_bill gates',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Brenton Thwaites',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_brie larson',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Brit Marling',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Bryan Cranston',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Caity Lotz',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Cameron Monaghan',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_chadwick boseman face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Chance Perdomo',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Chris Evans',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Chris Pratt',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Cobie Smulders',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Danielle Panabaker',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Dave Franco',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_david mazouz',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Dominic Purcell',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_drake',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_dua lipa face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Dwayne Johnson',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_eliza taylor',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_elizabeth olsen face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_elon musk',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Emilia Clarke',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Emily Bett Rickards',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Emma Stone',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_emma watson face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_gal gadot face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_grant gustin face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Gwyneth Paltrow',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Henry Cavil',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_jason isaacs',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Jason Momoa',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_jeff bezos',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Jeremy Renner',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Jesse Eisenberg',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Jim Parsons',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Jon Bernthal',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Josh Radnor',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_kiernan shipka_',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Kit Harington',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_kristen stewart face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Krysten Ritter',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Kumail Nanjiani',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_lindsey morgan face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Maisie Williams',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_margot robbie face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_maria pedraza',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Mark Ruffalo',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_mark zuckerberg',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Martin Starr',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Melissa benoit',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_miguel herran',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Mike Colter',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_millie bobby brown',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Morena Baccarin',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Morgan Freeman',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Natalie Portman_',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Neil Patrick Harris',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Paul Rudd',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Pedro Alonso',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Peter Dinklage',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Rami Melek',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_rihanna',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_RJ Mitte',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_robert downey jr face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Robert Knepper',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Robin Taylor',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Ryan Reynolds',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Sarah Wayne Callies',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Scarlett Johansson',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_sean pertwee',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Sebastian Stan',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_selena gomez',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_shakira',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Sophie Turner',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Stephen Amell',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Sundar Pichai',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_tati gabrielle',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_taylor swift',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Thomas Middleditch',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Tom Cavanagh',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_tom holland face',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Ursula Corbero',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Wentworth Miller',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_Willa Holland',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_William Fichtner',
 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS\\pins_zendaya']
In [3]:
for i in range(len(pins)):
    pins[i] = pins[i][73:]
pins
Out[3]:
['pins_Aaron Paul',
 'pins_alexandra daddario',
 'pins_Alvaro Morte',
 'pins_alycia debnam carey face',
 'pins_Amanda Crew',
 'pins_Amaury Nolasco',
 'pins_amber heard face',
 'pins_Anna Gunn',
 'pins_anne hathaway',
 'pins_barbara palvin face',
 'pins_bellamy blake face',
 'pins_Benedict Cumberbatch',
 'pins_Betsy Brandt',
 'pins_bill gates',
 'pins_Brenton Thwaites',
 'pins_brie larson',
 'pins_Brit Marling',
 'pins_Bryan Cranston',
 'pins_Caity Lotz',
 'pins_Cameron Monaghan',
 'pins_chadwick boseman face',
 'pins_Chance Perdomo',
 'pins_Chris Evans',
 'pins_Chris Pratt',
 'pins_Cobie Smulders',
 'pins_Danielle Panabaker',
 'pins_Dave Franco',
 'pins_david mazouz',
 'pins_Dominic Purcell',
 'pins_drake',
 'pins_dua lipa face',
 'pins_Dwayne Johnson',
 'pins_eliza taylor',
 'pins_elizabeth olsen face',
 'pins_elon musk',
 'pins_Emilia Clarke',
 'pins_Emily Bett Rickards',
 'pins_Emma Stone',
 'pins_emma watson face',
 'pins_gal gadot face',
 'pins_grant gustin face',
 'pins_Gwyneth Paltrow',
 'pins_Henry Cavil',
 'pins_jason isaacs',
 'pins_Jason Momoa',
 'pins_jeff bezos',
 'pins_Jeremy Renner',
 'pins_Jesse Eisenberg',
 'pins_Jim Parsons',
 'pins_Jon Bernthal',
 'pins_Josh Radnor',
 'pins_kiernan shipka_',
 'pins_Kit Harington',
 'pins_kristen stewart face',
 'pins_Krysten Ritter',
 'pins_Kumail Nanjiani',
 'pins_lindsey morgan face',
 'pins_Maisie Williams',
 'pins_margot robbie face',
 'pins_maria pedraza',
 'pins_Mark Ruffalo',
 'pins_mark zuckerberg',
 'pins_Martin Starr',
 'pins_Melissa benoit',
 'pins_miguel herran',
 'pins_Mike Colter',
 'pins_millie bobby brown',
 'pins_Morena Baccarin',
 'pins_Morgan Freeman',
 'pins_Natalie Portman_',
 'pins_Neil Patrick Harris',
 'pins_Paul Rudd',
 'pins_Pedro Alonso',
 'pins_Peter Dinklage',
 'pins_Rami Melek',
 'pins_rihanna',
 'pins_RJ Mitte',
 'pins_robert downey jr face',
 'pins_Robert Knepper',
 'pins_Robin Taylor',
 'pins_Ryan Reynolds',
 'pins_Sarah Wayne Callies',
 'pins_Scarlett Johansson',
 'pins_sean pertwee',
 'pins_Sebastian Stan',
 'pins_selena gomez',
 'pins_shakira',
 'pins_Sophie Turner',
 'pins_Stephen Amell',
 'pins_Sundar Pichai',
 'pins_tati gabrielle',
 'pins_taylor swift',
 'pins_Thomas Middleditch',
 'pins_Tom Cavanagh',
 'pins_tom holland face',
 'pins_Ursula Corbero',
 'pins_Wentworth Miller',
 'pins_Willa Holland',
 'pins_William Fichtner',
 'pins_zendaya']
In [4]:
print('The number of celebrities present is: ',len(pins))
The number of celebrities present is:  100
In [5]:
# Selecting a random folder and then a random image from the lot
import random
path = 'C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS/'
selection1 = random.choice(pins)
img_path = path +'/'+ selection1 +'/'+ '*'
selection_list = glob.glob(img_path)
selection2 = random.choice(selection_list)
print(selection2)
C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/PINS/PINS//pins_dua lipa face\dua lipa face11.jpg
In [6]:
# Displaying the image
image = cv2.imread(selection2)
plt.axis("off")
plt.title(selection1[5:])
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.show()

Building the face model using VGG

In [7]:
def vgg_face():	
    model = Sequential()
    model.add(ZeroPadding2D((1, 1), input_shape = (224, 224, 3)))
    model.add(Convolution2D(64, (3, 3), activation = 'relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(64, (3, 3), activation = 'relu'))
    model.add(MaxPooling2D((2, 2), strides = (2, 2)))
    
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(128, (3, 3), activation = 'relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(128, (3, 3), activation = 'relu'))
    model.add(MaxPooling2D((2, 2), strides = (2, 2)))
    
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(256, (3, 3), activation = 'relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(256, (3, 3), activation = 'relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(256, (3, 3), activation = 'relu'))
    model.add(MaxPooling2D((2, 2), strides = (2, 2)))
    
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation = 'relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation = 'relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation = 'relu'))
    model.add(MaxPooling2D((2, 2), strides =(2, 2)))

    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation = 'relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation = 'relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation = 'relu'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))
    
    model.add(Convolution2D(4096, (7, 7), activation = 'relu'))
    model.add(Dropout(0.5))
    model.add(Convolution2D(4096, (1, 1), activation = 'relu'))
    model.add(Dropout(0.5))
    model.add(Convolution2D(2622, (1, 1)))
    model.add(Flatten())
    model.add(Activation('softmax'))
    return model
In [8]:
# Model Summary
model = vgg_face()
model.load_weights('C:/Users/admin/Desktop/Great Learning/Advanced Computer Vision/Part 3 - vgg_face_weights.h5')
print(model.summary())
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
zero_padding2d (ZeroPadding2 (None, 226, 226, 3)       0         
_________________________________________________________________
conv2d (Conv2D)              (None, 224, 224, 64)      1792      
_________________________________________________________________
zero_padding2d_1 (ZeroPaddin (None, 226, 226, 64)      0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 224, 224, 64)      36928     
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 112, 112, 64)      0         
_________________________________________________________________
zero_padding2d_2 (ZeroPaddin (None, 114, 114, 64)      0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 112, 112, 128)     73856     
_________________________________________________________________
zero_padding2d_3 (ZeroPaddin (None, 114, 114, 128)     0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 112, 112, 128)     147584    
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 56, 56, 128)       0         
_________________________________________________________________
zero_padding2d_4 (ZeroPaddin (None, 58, 58, 128)       0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 56, 56, 256)       295168    
_________________________________________________________________
zero_padding2d_5 (ZeroPaddin (None, 58, 58, 256)       0         
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 56, 56, 256)       590080    
_________________________________________________________________
zero_padding2d_6 (ZeroPaddin (None, 58, 58, 256)       0         
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 56, 56, 256)       590080    
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 28, 28, 256)       0         
_________________________________________________________________
zero_padding2d_7 (ZeroPaddin (None, 30, 30, 256)       0         
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 28, 28, 512)       1180160   
_________________________________________________________________
zero_padding2d_8 (ZeroPaddin (None, 30, 30, 512)       0         
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 28, 28, 512)       2359808   
_________________________________________________________________
zero_padding2d_9 (ZeroPaddin (None, 30, 30, 512)       0         
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 28, 28, 512)       2359808   
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 14, 14, 512)       0         
_________________________________________________________________
zero_padding2d_10 (ZeroPaddi (None, 16, 16, 512)       0         
_________________________________________________________________
conv2d_10 (Conv2D)           (None, 14, 14, 512)       2359808   
_________________________________________________________________
zero_padding2d_11 (ZeroPaddi (None, 16, 16, 512)       0         
_________________________________________________________________
conv2d_11 (Conv2D)           (None, 14, 14, 512)       2359808   
_________________________________________________________________
zero_padding2d_12 (ZeroPaddi (None, 16, 16, 512)       0         
_________________________________________________________________
conv2d_12 (Conv2D)           (None, 14, 14, 512)       2359808   
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 7, 7, 512)         0         
_________________________________________________________________
conv2d_13 (Conv2D)           (None, 1, 1, 4096)        102764544 
_________________________________________________________________
dropout (Dropout)            (None, 1, 1, 4096)        0         
_________________________________________________________________
conv2d_14 (Conv2D)           (None, 1, 1, 4096)        16781312  
_________________________________________________________________
dropout_1 (Dropout)          (None, 1, 1, 4096)        0         
_________________________________________________________________
conv2d_15 (Conv2D)           (None, 1, 1, 2622)        10742334  
_________________________________________________________________
flatten (Flatten)            (None, 2622)              0         
_________________________________________________________________
activation (Activation)      (None, 2622)              0         
=================================================================
Total params: 145,002,878
Trainable params: 145,002,878
Non-trainable params: 0
_________________________________________________________________
None

Functions have been defined for loading the meta data

In [10]:
import os
class IdentityMetadata():
    def __init__(self, base, name, file):
        # print(base, name, file)
        # dataset base directory
        self.base = base
        # identity name
        self.name = name
        # image file name
        self.file = file

    def __repr__(self):
        return self.image_path()

    def image_path(self):
        return os.path.join(self.base, self.name, self.file) 
    
def load_metadata(path):
    metadata = []
    exts = []
    for i in os.listdir(path):
        for f in os.listdir(os.path.join(path, i)):
            # Check file extension. Allow only jpg/jpeg' files.
            ext = os.path.splitext(f)[1]
            if ext == '.jpg' or ext == '.jpeg':
                metadata.append(IdentityMetadata(path, i, f))
                exts.append(ext)
    return np.array(metadata), exts

metadata, exts = load_metadata(path)
labels = np.array([meta.name for meta in metadata])

Defining the VGG Face Descriptor

In [11]:
vgg_face_descriptor = Model(inputs = model.layers[0].input, outputs = model.layers[-2].output)

Embedding for the images

In [12]:
# Get embedding vector for first image in the metadata using the pre-trained model

image = cv2.imread(metadata[0].image_path())
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Normalising pixel values from [0-255] to [0-1]: scale RGB values to interval [0, 1]
img = (image / 255.).astype(np.float32)

img = cv2.resize(img, dsize = (224, 224))
print(img.shape)

# Obtain embedding vector for an image
# Get the embedding vector for the above image using vgg_face_descriptor model and print the shape
embedding_vector = vgg_face_descriptor.predict(np.expand_dims(img, axis = 0))[0]
print(embedding_vector.shape)
(224, 224, 3)
(2622,)

Get embeddings for all the images

Function to load the image

In [19]:
def load_image(path):
    image = cv2.imread(path)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    return image
In [20]:
from tqdm import tqdm
embeddings = []
embeddings = np.zeros((metadata.shape[0], 2622))
for i, meta in tqdm(enumerate(metadata)):
    try:  
        image = load_image(str(meta))
        image = (image/255.).astype(np.float32)
        image = cv2.resize(image, (224, 224))
        embeddings[i] = vgg_face_descriptor.predict(np.expand_dims(image, axis = 0))[0]
    except:
        embeddings[i] = np.zeros(2622)
10770it [1:11:13,  2.52it/s]

Function for finding the distance between a pair of images

In [21]:
def distance(emb1, emb2):
    return np.sum(np.square(emb1 - emb2))

Function to display the image pairs with distances between them

In [22]:
def show_pair(idx1, idx2):
    plt.figure(figsize = (8, 3))
    plt.suptitle(f'Distance = {distance(embeddings[idx1], embeddings[idx2]):.2f}')
    plt.subplot(121)
    plt.imshow(load_image(metadata[idx1].image_path()))
    plt.subplot(122)
    plt.imshow(load_image(metadata[idx2].image_path()))

Displaying the distances between pair for few samples

In [23]:
show_pair(170, 8)
show_pair(170, 167)
In [24]:
show_pair(1, 5)
show_pair(1, 180)
In [25]:
show_pair(200, 197)
show_pair(62, 197)

Splitting the data into train and test

In [26]:
train_idx = np.arange(metadata.shape[0]) % 9 != 0
test_idx = np.arange(metadata.shape[0]) % 9 == 0

# Features
X_train = np.array(embeddings)[train_idx]
X_test = np.array(embeddings)[test_idx]

# Labels
y_train = np.array([meta.name for meta in metadata[train_idx]])
y_test = np.array([meta.name for meta in metadata[test_idx]])

display(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
(9573, 2622)
(1197, 2622)
(9573,)
(1197,)

Label Encoder

In [27]:
# Encode labels
en = LabelEncoder()
y_train = en.fit_transform(y_train)
y_test = en.fit_transform(y_test)

Standardizing the vectors

In [28]:
# Standarize features
sc = StandardScaler()
X_train_sc = sc.fit_transform(X_train)
X_test_sc = sc.fit_transform(X_test)

PCA - To reduce the dimension

In [29]:
# Covariance matrix
cov_matrix = np.cov(X_train_sc.T)

# Eigen values and vector
eig_vals, eig_vecs = np.linalg.eig(cov_matrix)

# Cumulative variance explained
tot = sum(eig_vals)
var_exp = [(i /tot) * 100 for i in sorted(eig_vals, reverse = True)]
cum_var_exp = np.cumsum(var_exp)

print('Cumulative Variance Explained', cum_var_exp)
Cumulative Variance Explained [ 13.58416795  18.94867841  22.94242516 ...  99.99999983  99.99999999
 100.        ]
In [30]:
# Setting the threshold and finding the index whose value is greater than the set threshold
thres = 95
res = list(filter(lambda i: i > thres, cum_var_exp))[0]
index = (cum_var_exp.tolist().index(res))
print(f'Index of element just greater than {thres}: {str(index)}')
Index of element just greater than 95: 346

Plotting the Variance explained vs Number of Dimensions

In [31]:
# Ploting 
plt.figure(figsize = (15 , 7.2))
plt.bar(range(1, eig_vals.size + 1), var_exp, alpha = 0.5, align = 'center', label = 'Individual explained variance')
plt.step(range(1, eig_vals.size + 1), cum_var_exp, where = 'mid', label = 'Cumulative explained variance')
plt.axhline(y = thres, color = 'r', linestyle = '--')
plt.axvline(x = index, color = 'r', linestyle = '--')
plt.ylabel('Variance Explained %')
plt.xlabel('Number of Dimensions')
plt.legend(loc = 'BEST')
plt.tight_layout()
plt.show()
<ipython-input-31-b43971c55fa6>:9: MatplotlibDeprecationWarning: Unrecognized location 'BEST'. Falling back on 'best'; valid locations are
	best
	upper right
	upper left
	lower left
	lower right
	right
	center left
	center right
	lower center
	upper center
	center
This will raise an exception in 3.3.
  plt.legend(loc = 'BEST')
In [32]:
# Setting a random state
random_state = 32
In [33]:
# Reducing the dimensions
pca = PCA(n_components = index, random_state = random_state, svd_solver = 'full', whiten = True)
pca.fit(X_train_sc)
X_train_pca = pca.transform(X_train_sc)
X_test_pca = pca.transform(X_test_sc)
display(X_train_pca.shape, X_test_pca.shape)
(9573, 346)
(1197, 346)
In [34]:
svc_pca = SVC(C = 1, gamma = 0.001, kernel = 'rbf', class_weight = 'balanced', random_state = random_state)
svc_pca.fit(X_train_pca, y_train)
print('The accuracy of SVC for the train set is: {0:.3f}'.format(svc_pca.score(X_train_pca, y_train)*100))
The accuracy of SVC for the train set is: 99.405
In [35]:
# Predict
y_pred = svc_pca.predict(X_test_pca)

# Accuracy Score
print('The accuracy of SVC for the test set is: {}'.format(accuracy_score(y_test, y_pred).round(3)*100))
The accuracy of SVC for the test set is: 96.7
In [36]:
names = [name.split('_')[1].title().strip() for name in labels]

# Classification Report
print('Classification Report: \n{}'.format(classification_report(y_test, y_pred, target_names = np.unique(names))))
Classification Report: 
                          precision    recall  f1-score   support

              Aaron Paul       1.00      1.00      1.00        10
      Alexandra Daddario       0.91      1.00      0.95        10
            Alvaro Morte       1.00      1.00      1.00        14
Alycia Debnam Carey Face       1.00      1.00      1.00        12
             Amanda Crew       1.00      1.00      1.00         7
          Amaury Nolasco       1.00      0.89      0.94         9
        Amber Heard Face       1.00      1.00      1.00         7
               Anna Gunn       1.00      1.00      1.00        14
           Anne Hathaway       1.00      1.00      1.00        14
     Barbara Palvin Face       1.00      1.00      1.00         9
      Bellamy Blake Face       0.87      0.93      0.90        14
    Benedict Cumberbatch       1.00      1.00      1.00        12
            Betsy Brandt       1.00      1.00      1.00        10
              Bill Gates       1.00      0.90      0.95        10
        Brenton Thwaites       0.94      1.00      0.97        15
             Brie Larson       1.00      1.00      1.00        15
            Brit Marling       0.86      1.00      0.92        12
          Bryan Cranston       0.88      1.00      0.93        14
              Caity Lotz       1.00      1.00      1.00        12
        Cameron Monaghan       1.00      1.00      1.00        14
   Chadwick Boseman Face       0.89      1.00      0.94        17
          Chance Perdomo       0.90      1.00      0.95         9
             Chris Evans       1.00      0.93      0.96        14
             Chris Pratt       1.00      1.00      1.00        14
          Cobie Smulders       1.00      0.87      0.93        15
      Danielle Panabaker       1.00      1.00      1.00        14
             Dave Franco       1.00      1.00      1.00        13
            David Mazouz       0.92      1.00      0.96        11
         Dominic Purcell       0.92      1.00      0.96        12
                   Drake       1.00      0.86      0.92         7
           Dua Lipa Face       1.00      1.00      1.00        11
          Dwayne Johnson       1.00      0.92      0.96        12
            Eliza Taylor       1.00      1.00      1.00        13
    Elizabeth Olsen Face       1.00      1.00      1.00        10
               Elon Musk       1.00      1.00      1.00        17
           Emilia Clarke       1.00      0.85      0.92        13
     Emily Bett Rickards       1.00      0.80      0.89         5
              Emma Stone       1.00      1.00      1.00        14
        Emma Watson Face       1.00      1.00      1.00         8
          Gal Gadot Face       1.00      0.86      0.92        14
       Grant Gustin Face       1.00      1.00      1.00        11
         Gwyneth Paltrow       1.00      1.00      1.00        13
             Henry Cavil       1.00      1.00      1.00         8
            Jason Isaacs       1.00      0.93      0.96        14
             Jason Momoa       0.53      0.89      0.67         9
              Jeff Bezos       1.00      1.00      1.00        10
           Jeremy Renner       1.00      1.00      1.00         8
         Jesse Eisenberg       1.00      0.89      0.94         9
             Jim Parsons       1.00      1.00      1.00        10
            Jon Bernthal       0.92      1.00      0.96        11
             Josh Radnor       1.00      1.00      1.00        11
          Kiernan Shipka       1.00      0.93      0.96        14
           Kit Harington       1.00      0.94      0.97        16
    Kristen Stewart Face       0.92      1.00      0.96        12
          Krysten Ritter       0.93      1.00      0.96        13
         Kumail Nanjiani       0.92      1.00      0.96        11
     Lindsey Morgan Face       1.00      1.00      1.00        10
         Maisie Williams       1.00      0.89      0.94         9
      Margot Robbie Face       0.86      1.00      0.92        12
           Maria Pedraza       1.00      0.89      0.94         9
            Mark Ruffalo       1.00      1.00      1.00        12
         Mark Zuckerberg       0.94      0.94      0.94        17
            Martin Starr       1.00      0.93      0.97        15
          Melissa Benoit       1.00      0.89      0.94        18
           Miguel Herran       1.00      1.00      1.00        16
             Mike Colter       1.00      0.94      0.97        17
      Millie Bobby Brown       1.00      1.00      1.00        17
         Morena Baccarin       0.94      0.94      0.94        16
          Morgan Freeman       0.80      0.80      0.80        10
         Natalie Portman       1.00      1.00      1.00        10
     Neil Patrick Harris       1.00      1.00      1.00        14
               Paul Rudd       1.00      1.00      1.00        13
            Pedro Alonso       1.00      1.00      1.00        12
          Peter Dinklage       1.00      0.75      0.86         4
              Rami Melek       1.00      1.00      1.00        15
                 Rihanna       0.89      0.67      0.76        12
                Rj Mitte       1.00      1.00      1.00        20
   Robert Downey Jr Face       1.00      1.00      1.00         9
          Robert Knepper       1.00      0.94      0.97        18
            Robin Taylor       0.89      0.94      0.92        18
           Ryan Reynolds       1.00      1.00      1.00        13
     Sarah Wayne Callies       0.93      1.00      0.97        14
      Scarlett Johansson       1.00      0.90      0.95        10
            Sean Pertwee       1.00      1.00      1.00        18
          Sebastian Stan       0.92      0.92      0.92        13
            Selena Gomez       0.89      1.00      0.94         8
                 Shakira       1.00      1.00      1.00        15
           Sophie Turner       1.00      0.88      0.93         8
           Stephen Amell       1.00      1.00      1.00         7
           Sundar Pichai       1.00      1.00      1.00         9
          Tati Gabrielle       1.00      1.00      1.00         9
            Taylor Swift       1.00      1.00      1.00        13
      Thomas Middleditch       1.00      1.00      1.00        12
            Tom Cavanagh       0.89      0.89      0.89         9
        Tom Holland Face       1.00      1.00      1.00        10
          Ursula Corbero       1.00      1.00      1.00         6
        Wentworth Miller       1.00      1.00      1.00         7
           Willa Holland       0.79      1.00      0.88        11
        William Fichtner       1.00      0.92      0.96        13
                 Zendaya       1.00      1.00      1.00        12

                accuracy                           0.97      1197
               macro avg       0.97      0.96      0.97      1197
            weighted avg       0.97      0.97      0.97      1197

---------------------------------------------------------------------------------------------------------

PART - FOUR

Create an automation using computer vision to impute dynamic bounding boxes to locate cars or vehicles on the road

Importing the necessary libraries

In [ ]:
import os
import re
import cv2 # opencv library
import numpy as np
from os.path import isfile, join
import matplotlib.pyplot as plt
In [1]:
# Passing in the path along with the name of the mp4 file used
cap = cv2.VideoCapture("C:/Users/admin/Downloads/Video/video1.mp4")
# Capturing the number of frames in the video
length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
# Printing the number of frames
print('The frame count is: ',length)
2648
In [ ]:
import pixellib
from pixellib.instance import instance_segmentation
import cv2

# An rcnn model was downloaded and used for sematic segmentation here
segment_video = instance_segmentation()
segment_video.load_model("C:/Users/admin/Downloads/mask_rcnn_coco.h5")
segment_video.process_video("C:/Users/admin/Downloads/Video/video1.mp4", show_bboxes = True, frames_per_second= 15, output_video_name="traffic_monitor.mp4")

Screenshot of the output video

traffic_surveillance.png

-------------------------------------------- THE END -----------------------------------------------